Многоуровневая навигация Magento в пользовательской коллекции продуктов
Я работал над настраиваемым модулем для Magento (версия 1.8.0.0), который показывает список связанных продуктов определенного продукта.
Для этого я создал свой собственный модуль, перезаписав класс Mage_Catalog_Block_Product_List
.
В основном здесь, как это работает:
От контроллера я улавливаю продукты entity_id
, и я храню продукт в реестре, поэтому я могу использовать его внутри своего собственного написанного блока, который называется list.php
Вот метод, который заполняет коллекцию продуктов:
protected function _getProductCollection()
{
if (is_null($this->_productCollection)) {
$prod = Mage::registry('chosenproduct');
$this->_productCollection = $prod->getRelatedProductCollection()
->addAttributeToSelect('required_options')
->addAttributeToFilter(array(array('attribute'=>'accessory_manufacturer','neq'=>false)))
->addAttributeToSort('position', 'asc')
->addStoreFilter()
->setPageSize(30)
->setCurPage(1);
;
$this->_addProductAttributesAndPrices($this->_productCollection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($this->_productCollection);
$this->setProductCollection($this->_productCollection);
}
return $this->_productCollection;
}
Я также добавил следующее в макете .xml моего настраиваемого модуля, чтобы убедиться, что многоуровневая навигация показывает:
<reference name="left">
<block type="catalog/layer_view" name="catalog.leftnav" after="currency" template="catalog/layer/view.phtml"/>
</reference>
Многоуровневая навигация показывает, но кажется, что он принимает все продукты как коллекцию вместо пользовательской коллекции, которая используется в методе, который я добавил выше.
Я также знаю, что я могу получить каталог/слой, используя этот $layer = Mage::getSingleton('catalog/layer');
Класс layer также имеет метод под названием prepareProductCollection и setCollection, но по какой-то причине я не могу заставить его работать.
Любая помощь по этому поводу?
В принципе, я хочу иметь многоуровневую навигацию для продуктов, которые находятся в пользовательской коллекции.
Спасибо,
Ответы
Ответ 1
Мне просто удалось добиться того, чего я хотел. Я перезаписал класс Mage_Catalog_Model_Layer
и Mage_Catalog_Model_Category
Оба теперь имеют новую переменную с именем $_customCollection: protected $_customProductCollection;
Я перезаписал getProductCollection() в обоих классах, и я добавил это в начале метода:
if(isset($this->_customProductCollection)){
return $this->_customProductCollection;
}
У меня также есть метод, который позволяет мне установить этот "customProductCollection" внутри обоих этих классов. После того, как он будет установлен, остальные данные многоуровневой навигации/категории основаны на этой коллекции.
;)