0

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

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

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

<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>
4

1 回答 1

0

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

为了防止在产品 URL 中使用当前类别,您可以通过将文件复制到 来重写层模型app/code/core/Mage/Catalog/Model/Layer.phpapp/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;
}
于 2013-06-11T13:19:10.240 回答