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


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>

да, классический чистый метод, +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())

и попробуйте


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>

  <!-- ... -->
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.