在分层导航中隐藏或删除“类别”过滤器


8

我正在努力从分层结构中删除“类别”过滤器,因为我的新网站中已经有了“类别”下拉菜单,因此这只会浪费空间(并使我的客户感到困惑)

我知道这个问题已经被问过很多遍并且已经解决了,但是我尝试每种解决方案都没有成功。我相信这与我用于网站的自定义模板有关。

在查看了local.xml文件(位于模板文件夹中)之后,我认为我应该解决以下问题:

<reference name="product_list">
        <block type="core/text_list" name="category-right" as="category-right" translate="label">
            <label>Right Column</label>
            <block type="catalog/navigation" name="catalog.category" before="-" template="catalog/navigation/category_nav.phtml"/>
            <block type="catalog/layer_view" name="catalog.leftnav" after="catalog.category" template="catalog/layer/view.phtml"/>
            <block type="filterproducts/bestsellers_home_list" name="bestseller" template="catalog/navigation/best_sellers.phtml"/>
            <block type="core/template" name="right.permanent.callout" template="callouts/right_col.phtml">
                <block type="cms/block" name="cms_images_block">
                    <action method="setBlockId"><block_id>category_right_block</block_id></action>
                </block>
            </block>
        </block>
    </reference>

第一种- 块类型 -应该是类别菜单(我很好)。第二种- 块类型 -在类别菜单的下面构建“ filter by”菜单,我很确定问题出在这里。

我相信我应该取消“ catalog.leftnav”内部的设置,即使我尝试添加以下代码:

<catalog_category_layered>
     <reference name="product_list">
        <action method="unsetChild"><child>category_filter</child></action>
    </reference>
</catalog_category_layered>

什么都没发生。我究竟做错了什么?


您只需要避免分层导航中的类别部分,也不想避免其他过滤器?
拉吉夫K托米2014年

究竟!但我要疯了,以了解如何....
吉安卡罗

local.xml不应位于布局文件夹中,而不应位于模板文件夹中吗?
Yumecosmos

Answers:


14

基于stackexchange.com的答案:
如果要通过XML进行操作,则应编辑catalog.xml

更换:

<block type="catalog/layer_view" name="catalog.leftnav" 
    after="currency" template="catalog/layer/view.phtml" />  

有了这个:

<block type="catalog/layer_view" name="catalog.leftnav" after="currency" template="catalog/layer/view.phtml">  
    <action method="unsetChild"><alias>category_filter</alias></action>
</block>

是的,是一种经典的清洁方法,为此需要+1
拉杰夫K托米2014年

1
我试过了,但是根本行不通。我相信这与我的自定义模板有关。在我的模板“ catalog.xml”中没有这些行。无论如何,我已经在stackexchange中读到了正确的方法是使用“ local.xml”文件。除了-.xml-方法之外,您还能建议我其他方法来达到期望的结果吗?
giancarlo 2014年

<alias>和<child>有什么区别?对我来说,这两个作品...
versedi

在这种特殊情况下没有区别。您甚至可以使用<action method =“ unsetChild”> <xyz> category_filter </ xyz> </ action>
Amasty 2015年

如果像我一样尝试将其添加到local.xml中,则可能会出现这种错误...。 “您不能多次定义关联名称'mycustomattribute'”, 因为catalog / layer_view模块被两次调用-此处解释: stackoverflow.com/questions/10524017/… 使用下面的giancarlo发布的代码, <reference name="catalog.leftnav"> <action method="unsetChild"><alias>category_filter</alias></action> </reference>但要添加到local.xml中。这对我
有用

5

首先尝试此代码。在这里,我们试图通过布局xml更新删除它

档案: app/design/frontend/<package>/<theme>/layout/local.xml

<layout>
    <catalog_category_layered>
        <reference name="catalog.leftnav">
            <action method="unsetChild"><alias>category_filter</alias></action>
        </reference>
    </catalog_category_layered>
</layout>

这样可以解决您的问题。

如果不起作用,则需要进行块重写。为此,您需要创建一个模块。您需要重写的块是Mage_Catalog_Block_Layer_View

模块的激活文件如下所示

档案: app/etc/modules/Avoid_CategoryFromLN.xml

<config>
    <modules>
         <Avoid_CategoryFromLN>
             <active>true</active>
             <codePool>local</codePool>
         </Avoid_CategoryFromLN>
     </modules>
</config>

这是重写配置的样子

档案: app\code\local\Avoid/CategoryFromLN/etc/config.xml

<config>
    <modules>
        <Avoid_CategoryFromLN>
            <version>1.0.0</version>
        </Avoid_CategoryFromLN>
    </modules>
    <global>
        <blocks>
            <catalog>
                <rewrite>
                    <layer_view>Avoid_CategoryFromLN_Block_Layer_View</layer_view>
                </rewrite>
            </catalog>
        </blocks>
    </global>
</config>

现在您的重写块应该拥有此内容

档案: app\code\local\Avoid/CategoryFromLN/Block/Layer/View.php

<?php
class Avoid_CategoryFromLN_Block_Layer_View exteds Mage_Catalog_Block_Layer_View
{
    public function getFilters()
    {

        $filterableAttributes = $this->_getFilterableAttributes();
        foreach ($filterableAttributes as $attribute) {
            $filters[] = $this->getChild($attribute->getAttributeCode() . '_filter');
        }

        return $filters;
    }
}

getFilters()是在分层导航过滤器内部实际包含类别过滤器的方法。我们只是通过重写核心类来删除该代码。而已。

注意事项::请保持原样。不要给他们写小写字母。如果这样做,它将无法正常工作。Magento在这些方面很严格:)因此,请多次修改所有文件夹名称和文件名。确保所有名称内容保持原样

现在再试一次。


抱歉,但是编辑local.xml文件不会产生任何结果。关于模块的创建,我对此有些怀疑。我是magento的“新手”,所以请多多包涵。这是按照建议创建新模块的工作:创建此新文件夹:“ app \ code \ local \ my_module_name \ etc”创建config.xml文件在“ config.xml”中添加您告诉我的内容文件创建一个新文件夹:“ app \ code \ local \ my_module_name \ block \ layer”创建一个名为“ view.php”的新文件复制在“ view.php”文件中建议的内容。此后,我再试一次,但没有任何改变。我想念什么吗?
giancarlo 2014年

另外,我在stackexchange中发现了这个答案,它提供了另一种解决方案:magento.stackexchange.com/questions/31631/…但是我相信应该修改它以适合我的模板设置。
giancarlo 2014年

不,您的配置错误。我将为您更新答案
Rajeev K Tomy 2014年

编辑的答案。现在,它是一个完整的模块。随意使用它。请注意,您需要保持大写字母不变
Rajeev K Tomy 2014年

关于您指出的链接,在您的情况下并不理想。如果你把isAnchorno,那么整个分层导航GET消失。
Rajeev K Tomy 2014年

5

我将发布对我有用的内容,以供他人参考

添加此:

<reference name="catalog.leftnav">  
<action method="unsetChild"><alias>category_filter</alias></action>
</reference>

在每个类别的自定义设计选项卡中都可以解决问题。

尤其要记住将其添加到父类别中,这就是为我做的。


1

中的unset-child解决方案local.xml效果很好。请注意,如果您使用的是企业版,则引用称为“ enterprisecatalog”:

<reference name="enterprisecatalog.leftnav">
    <action method="unsetChild">
        <alias>category_filter</alias>
    </action>
</reference>

旁注:您可能在任何核心XML中找不到任何相应的子块定义。这是由于这样的事实,在相应目录层视图的功能category_filter中创建(硬编码)如“ ”的子级_prepareLayoutunsetChild但是,通过使用,您可以删除添加了硬编码的子项。


0

这是作品 https://magento.stackexchange.com/a/45249/9951

还需要对app / design / frontend / rwd / default / template / catalog / layer / view.phtml添加更改

像这样

if($_filter != '' && $_filter->getItemsCount())

并且还需要更改 /app/code/core/Mage/Catalog/Block/Layer/View.php

复制/app/code/core/Mage/Catalog/Block/Layer/View.php

/app/code/local/Mage/Catalog/Block/Layer/View.php

并更改方法canShowOptions()

需要改变

if (&& $filter->getItemsCount())

if ($filter != '' && $filter->getItemsCount())

并尝试


0

这就是对我有用的(在Magento 1.9上)。

local.xml文件上添加以下行:

<layout version="0.1.0">

  <default>

    <reference name="left">

      <!-- Remove layered navigation block form catalog page -->
      <remove name="catalog.leftnav"/>

      <!-- ... -->

    </reference>

    <!-- ... -->

  </default>

  <!-- ... -->

  <catalogsearch_result_index>

    <!-- Remove layered navigation from search result page -->
    <reference name="left">
      <action method="unsetChild">
        <child>catalogsearch.leftnav</child>
      </action>
    </reference>

  </catalogsearch_result_index>

  <!-- ... -->
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.