自定义产品集合未被分层导航过滤

时间:2014-09-24 11:41:51

标签: magento magento-1.8 layered-navigation

我已经覆盖了产品List.php Class&这是代码

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;
}

工作正常,我也按照here添加了分层导航,并按预期显示了分层导航。

唯一的问题是,当我点击分层导航中的任何过滤器时,导航会更新并且过滤器也会添加到网址,但产品列表不会被所选过滤器过滤。 请指导我如何在产品集合中应用过滤器

1 个答案:

答案 0 :(得分:4)

我可能在这里错了,但是被覆盖的_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);
        }
    }
}

也许您应该恢复到此方法的原始版本并查看分层导航是否开始工作,如果是,那么您就知道需要将此图层逻辑扩展或合并到您的版本中。