Если вы заинтересованы только в создании этой функции на странице продукта, вы можете найти большую часть волшебства в Mage_Catalog_Block_Product_List_Related::_prepareData()
.
Чтобы заполнить ваши сопутствующие товары случайными товарами, нам сначала нужно точно знать, сколько случайных товаров нам понадобится. В данном случае это (найдено 4 связанных продуктов):
// Existing Magento code near end of method
$this->_itemCollection->load();
// Our code
$numRandomsToGet = 4 - count($this->_itemCollection);
Затем мы можем получить необходимое количество случайных товаров и добавить их в коллекцию:
// Our code
$randCollection = Mage::getResourceModel('catalog/product_collection');
Mage::getModel('catalog/layer')->prepareProductCollection($randCollection);
$randCollection->getSelect()->order('rand()');
$randCollection->addStoreFilter();
$randCollection->setPage(1, $numRandomsToGet);
$randCollection->addIdFilter($this->_itemCollection->getAllIds(), true);
foreach($randCollection as $randProduct)
{
$this->_itemCollection->addItem($randProduct);
}
// Existing Magento code
foreach ($this->_itemCollection as $product) {
$product->setDoNotUseCategoryId(true);
}
return $this;
Предостережение / Plug: я извлек этот код из нашего расширения Менеджера сопутствующих товаров для Magento , так что, возможно, существует некоторая путаница, внешняя по отношению к этому методу, которая должна быть выполнена, но я так не думаю. Если вы застряли, вы можете попробовать загрузить расширение и изучить код полностью. Или, конечно, вы можете просто использовать расширение как есть.