/** * @param ManyManyList $products */ public function updateRelatedProducts(&$products, $limit, $random) { $curCount = $products->count(); if ($curCount < $limit) { $cfg = Config::inst()->forClass(get_class($this->owner)); $class = $cfg->get('related_products_class'); // look up the fields $fields = $cfg->get('related_products_fields'); if (empty($fields)) { return; } if (!is_array($fields)) { $fields = array($fields); } // create a filter from the fields $filter = array(); foreach ($fields as $f) { $filter[$f] = $this->owner->getField($f); } // Convert to an array list so we can add to it $products = new ArrayList($products->toArray()); // Look up products that match the filter $generated = DataObject::get($class)->filterAny($filter)->exclude('ID', $this->owner->ID)->sort('RAND()')->limit($limit - $curCount); foreach ($generated as $prod) { $products->push($prod); } } }