Многоуровневая навигация в Magento по индивидуальной коллекции товаров - PullRequest
15 голосов
/ 20 апреля 2011

Я работал над пользовательским модулем для 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');

В классе слоев также есть метод prepareProductCollection и setCollection, но по какой-то причине я не могу заставить его работать.

Любая помощь в этом?

В основном я хочу иметь многоуровневую навигацию для продуктов, которые находятся в пользовательской коллекции.

Спасибо

1 Ответ

15 голосов
/ 21 сентября 2011

Мне просто удалось добиться того, чего я хотел.Я переписал и класс Mage_Catalog_Model_Layer, и класс Mage_Catalog_Model_Category

Теперь у обоих есть новая переменная с именем $ _customCollection: protected $_customProductCollection;

Я перезаписал getProductCollection () в обоих классах иЯ добавил это в начале метода:

if(isset($this->_customProductCollection)){
        return $this->_customProductCollection;
    }

У меня также есть метод, который позволяет мне устанавливать этот «customProductCollection» внутри обоих этих классов.Как только оно установлено, остальные данные многоуровневой навигации / категории основываются на этом наборе.

;)

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