Скрыть или удалить фильтр «категория» из многоуровневой навигации

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>

Первый - тип блока - должен быть меню категорий (и я в порядке). Второй - тип блока - создает меню «Фильтровать по», чуть ниже меню категорий, и я уверен, что проблема здесь.

Я считаю, что я должен сбросить что-то в "catalog.leftnav", но даже если я попытаюсь добавить этот код:

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

Ничего не произошло. Что я делаю неправильно?

Джанкарло
источник
Вам просто нужно избегать раздела категорий из многоуровневой навигации и не хотите избегать других фильтров?
Раджив К Томи
точно! но я схожу с ума, чтобы узнать, как ....
Джанкарло
Должен ли local.xml находиться в папке макета, а не в папке шаблона?
Yumecosmos

Ответы:

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>
Amasty
источник
да, классический чистый метод, +1 за это
Раджив К Томи
1
Я пытался, но это просто не работает. Я верю, что это связано с моим пользовательским шаблоном. В моем шаблоне "catalog.xml" нет этих строк. Во всяком случае, я прочитал в stackexchange, что правильный метод заключается в работе с файлом "local.xml". Кроме метода -.xml-, можете ли вы предложить мне другой способ достижения желаемого результата?
Джанкарло
В чем разница между <alias> и <child>? Для меня обе работы ...
versedi
В этом конкретном случае нет никакой разницы. Вы можете использовать даже <action method = "unsetChild"> <xyz> category_filter </ xyz> </ action>
Amasty
Если вы, как и я, пытались добавить это в свой 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. это сработало для меня на 1.8
Tofuwarrior
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 не дает никаких результатов. Что касается создания модуля, у меня есть некоторые сомнения по этому поводу. Я новичок в маженто, поэтому, пожалуйста, потерпите меня. Вот что я сделал для создания нового модуля, как было предложено: Создайте эту новую папку: «app \ code \ local \ my_module_name \ etc». Создайте файл config.xml. Добавьте содержимое, которое вы сказали мне, в «config.xml». файл Создайте новую папку: «app \ code \ local \ my_module_name \ block \ layer». Создайте новый файл с именем «view.php». Скопируйте содержимое, предложенное вами в файле «view.php». После этого я пытаюсь снова, но ничего не меняется. Я что-то пропустил?
Джанкарло
Кроме того, я нашел этот ответ в stackexchange, который предлагает другое решение: magento.stackexchange.com/questions/31631/… Но я верю, что его следует изменить, чтобы он соответствовал моим настройкам шаблона.
Джанкарло
Нет, ваши настройки неверны. Я обновлю свой ответ для вас
Rajeev K Tomy
отредактированный ответ. Теперь это полный модуль. Не стесняйтесь использовать его. Обратите внимание, что вы должны сохранить заглавные буквы, как есть
Rajeev K Tomy
Что касается ссылки, которую вы указали, она не идеальна в вашем случае. Если вы положили isAnchorв no, то всех слоистых навигациях прибудут исчез.
Раджив К Томи
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элементы, подобные " ", создаются (жестко запрограммированы) в _prepareLayoutзависимости от представления соответствующего слоя каталога. Однако unsetChildвы можете удалить жестко добавленного дочернего элемента.

Мануэль Рюльке
источник
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())

и попробуйте

Alex
источник
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>

  <!-- ... -->
Andrea
источник