Oculte ou remova o filtro "categoria" da navegação em camadas

8

Estou lutando para remover o filtro Categoria das camadas, porque já tenho um menu suspenso de categoria no meu novo site, portanto, será apenas um desperdício de espaço (e confundir meus clientes)

Sei que esse problema já foi solicitado várias vezes e já foi resolvido, mas tentei todas as soluções sem sucesso. Acredito que isso esteja relacionado ao modelo personalizado usado no site.

Depois de olhar para o meu arquivo local.xml (encontrado na minha pasta de modelos), acredito que devo trabalhar em torno destas linhas:

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

O primeiro - tipo de bloco - deve ser o menu de categorias (e estou bem com isso). O segundo tipo de bloco cria o menu "filtrar por", logo abaixo do menu de categorias, e tenho certeza de que o problema está aqui.

Eu acredito que devo desmarcar algo dentro do "catalog.leftnav", mas mesmo se eu tentar adicionar este código:

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

nada acontece. O que estou fazendo errado?

giancarlo
fonte
você só precisa evitar a seção de categoria da navegação em camadas e não deseja evitar outros filtros?
Rajeev K Tomy
exatamente! mas eu estou ficando louco para descobrir como .... #
4400 giancarlo
O local.xml não deveria estar na pasta de layout, não na pasta de modelos?
Yumecosmos

Respostas:

14

Com base na resposta stackexchange.com:
Se você quiser fazer isso via XML, edite catalog.xml

substituir:

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

com isso:

<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
fonte
sim um método clássico limpo, + 1 para que
Rajeev K Tomy
11
Eu tentei, mas simplesmente não funciona. Acredito que isso esteja relacionado ao meu modelo personalizado. No meu modelo "catalog.xml" não existem essas linhas. De qualquer forma, li na stackexchange que o método correto é trabalhar com o arquivo "local.xml". Além do método -.xml-, você pode me sugerir outra maneira de alcançar o resultado desejado?
Giancarlo #
Qual é a diferença entre <alias> e <child>? Para mim, ambas as obras ... #
25215
Não há diferença neste caso em particular. Você pode usar até <action method = "unsetChild"> <xyz> category_filter </xyz> </action>
Amasty 16/15
Se, como eu, você tentou adicionar isso ao seu local.xml, poderá receber esse tipo de erro .... "Você não pode definir um nome de correlação 'mycustomattribute' mais de uma vez" porque o módulo catalog / layer_view é chamado duas vezes - aqui explicado: stackoverflow.com/questions/10524017/… Use o código postado por giancarlo abaixo, <reference name="catalog.leftnav"> <action method="unsetChild"><alias>category_filter</alias></action> </reference>mas adicione em local.xml. isso funcionou para mim em 1,8
Tofuwarrior 15/09/16
5

Tente este código primeiro. Aqui estamos tentando remover isso via atualização xml de layout

Arquivo : 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>

Isto irá resolver o seu problema.

Se não funcionou, será necessário reescrever o bloco. Para isso, você precisa criar um módulo. O bloco que você precisa reescrever é Mage_Catalog_Block_Layer_View.

O arquivo de ativação do módulo fica assim

Arquivo : app/etc/modules/Avoid_CategoryFromLN.xml

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

É assim que a configuração de reescrita se parece

Arquivo : 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>

Agora seu bloco de reescrita deve possuir este conteúdo

Arquivo : 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;
    }
}

Aqui getFilters()está o método que realmente inclui filtros de categoria dentro do filtro de navegação em camadas. Apenas removemos esse código reescrevendo a classe principal. É isso aí.

Nota grande :: Você deve manter as letras maiúsculas como estão. Não faça letras minúsculas. Se você fizer isso, não funcionará. O Magento é rigoroso nessas coisas :) Portanto, revise todos os nomes de pastas e arquivos várias vezes. Mantenha o conteúdo de todos os nomes como está

Agora tente novamente.

Rajeev K Tomy
fonte
desculpe, mas editar o arquivo local.xml não fornece nenhum resultado. sobre a criação de um módulo, tenho algumas dúvidas sobre isso. Eu sou um "novato" do magento, então por favor, tenha paciência comigo. Foi o que fiz para criar um novo módulo, conforme sugerido: Crie esta nova pasta: "app \ code \ local \ my_module_name \ etc" Crie o arquivo config.xml Adicione o conteúdo que você me disse em "config.xml" file Crie uma nova pasta: "app \ code \ local \ my_module_name \ block \ layer" Crie um novo arquivo chamado "view.php" Copie o conteúdo sugerido no arquivo "view.php". Depois disso, tento novamente, mas nada muda. Perco alguma coisa?
Giancarlo
Além disso, descobri esta resposta no stackexchange que oferece outra solução: magento.stackexchange.com/questions/31631/… Mas acredito que isso deve ser modificado para se ajustar às configurações do meu modelo.
Giancarlo
Nope suas configurações estão erradas. Eu atualizarei minha resposta para você
Rajeev K Tomy
resposta editada. Agora é um módulo completo. Sinta-se livre para usá-lo. Por favor, note que você precisa manter as letras maiúsculas, pois são
Rajeev K Tomy
em relação ao link que você apontou, não é o ideal no seu caso. Se você colocar isAnchorpara no, em seguida, toda a get de navegação em camadas desapareceu.
Rajeev K Tomy
5

Vou postar o que funcionou para mim como referência para os outros

adicionando isto:

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

na guia de design personalizado de todas as categorias, faz o truque.

Lembre-se especialmente de adicioná-lo na categoria principal, foi o que fez por mim.

giancarlo
fonte
1

A solução criança não configurada local.xmlfunciona bem. Observe que, se você estiver trabalhando com a edição corporativa, a referência será chamada " enterprisecatalog":

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

Nota lateral: Você não pode encontrar nenhuma definição correspondente de bloqueio filho em qualquer um dos XML principais. Isso se deve ao fato de que filhos como " category_filter" são criados (codificados) em _prepareLayoutfunção da visualização da camada de catálogo correspondente. Ao usar, unsetChildvocê pode remover o filho adicionado embutido no código.

Manuel Rülke
fonte
0

Isso funciona https://magento.stackexchange.com/a/45249/9951

MAS

Também é necessário adicionar alterações ao aplicativo / design / frontend / rwd / default / template / catalog / layer / view.phtml

como isso

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

e também precisa de alterações em /app/code/core/Mage/Catalog/Block/Layer/View.php

copiar /app/code/core/Mage/Catalog/Block/Layer/View.php

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

e altere o método canShowOptions ()

precisa mudar

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

para

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

e tentar

Alex
fonte
0

Isto é o que funcionou para mim (no Magento 1.9).

Adicione estas linhas no seu local.xmlarquivo:

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