Пользовательская коллекция товаров не фильтруется с помощью многоуровневой навигации

Я переопределил класс List.php продукта и вот код

protected function _getProductCollection()
{   
  if (is_null($this->_productCollection)) {

    $result = array_unique($productIds);        

    $collection = Mage::getResourceModel('catalog/product_collection');
    $attributes = Mage::getSingleton('catalog/config')->getProductAttributes();
    $collection->addAttributeToSelect($attributes);
    $collection->addIdFilter($result);
    Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);

    $this->_productCollection = $collection;
    }

    return $this->_productCollection;
}

Работая нормально, я также добавил слоистую навигацию, как упомянуто здесь, и слоистая навигация появилась, как и ожидалось.

Единственная проблема заключается в том, что, когда я нажимаю на любой фильтр в многоуровневой навигации, навигация обновляется, и фильтр также добавляется в URL, но список товаров не будет фильтроваться выбранным фильтром. Подскажите пожалуйста, как я могу применить фильтры к коллекции продуктов

1 ответ

Решение

Я могу ошибаться здесь, но ваш переопределен _getProductCollection() Похоже, что метод обхода многоуровневой навигации. Я не знаю, какова была ваша цель, что требовало от вас этого, но в оригинальной версии коллекция продуктов вводится из многоуровневой модели навигации. Mage_Catalog_Model_Layer:

protected function _getProductCollection()
{
    if (is_null($this->_productCollection)) {
        $layer = $this->getLayer();
        /* @var $layer Mage_Catalog_Model_Layer */
        if ($this->getShowRootCategory()) {
            $this->setCategoryId(Mage::app()->getStore()->getRootCategoryId());
        }

        // if this is a product view page
        ...

        $origCategory = null;
        if ($this->getCategoryId()) {
            $category = Mage::getModel('catalog/category')->load($this->getCategoryId());
            if ($category->getId()) {
                $origCategory = $layer->getCurrentCategory();
                $layer->setCurrentCategory($category);
            }
        }
        $this->_productCollection = $layer->getProductCollection();

        $this->prepareSortableFieldsByCategory($layer->getCurrentCategory());

        if ($origCategory) {
            $layer->setCurrentCategory($origCategory);
        }
    }
}

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

Другие вопросы по тегам