Как получить случайные продукты, если у меня нет связанных продуктов в magento - PullRequest
3 голосов
/ 19 марта 2012

У меня есть проблема. Я хочу показать 4 сопутствующих товара на странице товара. Это просто, и я сделал это. Но если у продукта нет ни одного или менее 4 продуктов, я хочу, чтобы оставшийся продукт случайно отображался на странице.

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Чтобы сначала выбрать 4 случайных продукта, вам нужно переписать класс, который отвечает за связанный блок (или просто переместить этот файл в локальную папку), и изменить логику для функции, которая возвращает коллекцию, к следующему коду:

$productsCollection = Mage::getResourceModel('catalog/product_collection');
$productsCollection->getSelect()->order('rand()');
$productsCollection->getSelect()->limit(4);

Надеюсь, это будет полезно

1 голос
/ 26 марта 2012

Если вы заинтересованы только в создании этой функции на странице продукта, вы можете найти большую часть волшебства в 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 , так что, возможно, существует некоторая путаница, внешняя по отношению к этому методу, которая должна быть выполнена, но я так не думаю. Если вы застряли, вы можете попробовать загрузить расширение и изучить код полностью. Или, конечно, вы можете просто использовать расширение как есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...