主页上的magento分层导航 - 过滤的项目有错误的URL,导致404

时间:2013-06-11 13:03:24

标签: magento layered-navigation

经过大量搜索,我终于找到了一个解决方案,将分层导航添加到Magento主页。乍一看,它正如预期的那样正常运行过滤结果。 但是,有一个问题,因为过滤结果的URL都在其网址中添加了“根目录”。这导致404 - 但是,如果我取出'根目录',网址工作正常。

我错过了什么?请帮忙! 提前感谢您的帮助!

将分层导航添加到主页的代码:

<reference name="left">
<block type="catalog/navigation" name="catalog.cat.leftnav" before="sidenav.left" template="catalog/navigation/left.phtml"/>
<block type="catalog/layer_view" name="catalog.leftnav" after="catalog.cat.leftnav" template="catalog/layer/view.phtml"/>
<action method="unsetChild"><alias>right.reports.product.viewed</alias></action>
<action method="unsetChild"><alias>right.reports.product.compared</alias></action>
</reference>
<reference name="content">
<block type="catalog/product_list" name="product_home" template="catalog/product/list.phtml">
<action method="setCategoryId">[b]<category_id>3</category_id>[/b]</action>
<block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
<block type="page/html_pager" name="product_list_toolbar_pager" />
</block>
<action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
</block>
</reference>

1 个答案:

答案 0 :(得分:0)

分层导航需要一个类别作为基础来获取产品,要过滤的子类别等。然后,在主页上,它默认采用根类别,相应的产品集合就像在其他上一样。 “常见”类别页面:它使用URL重写链接到当前类别。

要阻止在产品网址中使用当前类别,您可以通过将文件app/code/core/Mage/Catalog/Model/Layer.php复制到app/code/local/Mage/Catalog/Model/并使用以下内容更改其中的prepareProductCollection($collection)来重写图层模型:

public function prepareProductCollection($collection)
{
    $collection
        ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
        ->addMinimalPrice()
        ->addFinalPrice()
        ->addTaxPercents();

    if ($this->getCurrentCategory()->getId() == $this->getCurrentStore()->getRootCategoryId()) {
        $collection->addUrlRewrite(0);
    } else {
        $collection->addUrlRewrite($this->getCurrentCategory()->getId());
    }

    Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);

    return $this;
}