【问题标题】:magento layered navigation on home page - filtered items have wrong urls, causes 404主页上的magento分层导航 - 过滤的项目有错误的网址,导致404
【发布时间】:2013-06-11 22:36:34
【问题描述】:

经过大量搜索,我终于找到了在 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>

【问题讨论】:

    标签: magento layered-navigation


    【解决方案1】:

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

    为了防止在产品 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;
    }
    

    【讨论】:

    • 谢谢 - 我在 list.phtml 的什么地方添加这个?
    • 可以放在foreach ($_productCollection as $_product):下面
    • 我的错,在您的情况下,URL 重写已经存在于集合中,因此 Magento 不会处理 getDoNotUseCategoryId() 的结果。您可以使用$product-&gt;unsUrlDataObject(),但这不是一个真正干净的解决方案。另一种方法是更改​​层模型 (Mage_Catalog_Model_Layer) 中的方法 prepareProductCollection(),使其在为根类别添加 URL 重写时使用空值而不是类别 ID。
    • 谢谢 - 我在哪里可以找到图层模型 Mage_Catalog_Model_Layer(文件)以便我修改它?
    • 找到文件(Layer.php)。我要在 prepareProductCollection 中进行哪些更改?
    猜你喜欢
    • 1970-01-01
    • 2011-10-08
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多