Masquer ou supprimer le filtre «catégorie» de la navigation en couches

8

J'ai du mal à supprimer le filtre de catégorie de la couche, car j'ai déjà un menu déroulant de catégorie dans mon nouveau site Web, ce ne sera donc qu'une perte d'espace (et confondra mes clients)

Je sais que ce problème a déjà été posé à plusieurs reprises et déjà résolu, mais j'ai essayé toutes les solutions sans succès. Je crois que cela est lié au modèle personnalisé que j'utilise pour le site Web.

Après avoir regardé mon fichier local.xml (trouvé dans mon dossier de modèles), je pense que je devrais contourner ces lignes:

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

Le premier - type de bloc - devrait être le menu des catégories (et ça me convient). Le deuxième type de bloc - construit le menu "filtrer par", juste en dessous du menu de catégorie, et je suis presque sûr que le problème est là.

Je crois que je devrais annuler quelque chose dans le "catalog.leftnav" mais même si j'essaye d'ajouter ce code:

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

Rien ne se passe. Qu'est-ce que je fais mal?

giancarlo
la source
vous avez juste besoin d'éviter la section catégorie de la navigation en couches et vous ne voulez pas éviter d'autres filtres?
Rajeev K Tomy
exactement! mais je deviens fou pour savoir comment ....
giancarlo
Le fichier local.xml ne doit-il pas se trouver dans le dossier de présentation, pas dans le dossier de modèle?
Yumecosmos

Réponses:

14

Basé sur la réponse de stackexchange.com:
Si vous voulez le faire via XML, vous devez éditer catalog.xml

remplacer:

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

avec ça:

<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
la source
oui une méthode propre classique, + 1 pour cela
Rajeev K Tomy
1
J'ai essayé, mais cela ne fonctionne tout simplement pas. Je crois que cela est lié à mon modèle personnalisé. Dans mon modèle "catalog.xml", il n'y a pas ces lignes. Quoi qu'il en soit, j'ai lu dans stackexchange que la bonne méthode consiste à travailler avec le fichier "local.xml". Autre que la méthode -.xml-, pouvez-vous me suggérer une autre façon d'obtenir le résultat souhaité?
giancarlo
Quelle est la différence entre <alias> et <enfant>? Pour moi, les deux œuvres ...
versedi
Il n'y a aucune différence dans ce cas particulier. Vous pouvez même utiliser <action method = "unsetChild"> <xyz> category_filter </xyz> </action>
Amasty
Si, comme moi, vous avez essayé d'ajouter ceci dans votre fichier local.xml, vous pouvez alors obtenir ce genre d'erreur .... "Vous ne pouvez pas définir plus d'une fois un nom de corrélation 'mycustomattribute'" car le module catalog / layer_view est appelé deux fois, expliqué ici: stackoverflow.com/questions/10524017/… Utilisez le code posté par giancarlo ci-dessous <reference name="catalog.leftnav"> <action method="unsetChild"><alias>category_filter</alias></action> </reference>mais ajoutez dans local.xml. cela a fonctionné pour moi le 1.8
Tofuwarrior
5

Essayez d'abord ce code. Ici, nous essayons de supprimer cela via la mise à jour XML de la mise en page

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

Cela résoudra votre problème.

Si cela n'a pas fonctionné, vous devez effectuer une réécriture de bloc. Pour cela, vous devez créer un module. Le bloc que vous devez réécrire estMage_Catalog_Block_Layer_View .

Le fichier d'activation du module ressemble à ceci

Fichier : app/etc/modules/Avoid_CategoryFromLN.xml

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

Voici à quoi ressemble la réécriture de la configuration

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

Maintenant, votre bloc de réécriture devrait posséder ce contenu

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

Voici getFilters()la méthode qui inclut réellement les filtres de catégorie à l'intérieur du filtre de navigation en couches. Nous supprimons simplement ce code en réécrivant la classe principale. C'est ça.

Grande note:: vous devez conserver les majuscules telles quelles. Ne leur faites pas de petites lettres. Si vous le faites, cela ne fonctionnera pas. Magento est strict dans ces choses :) Donc, révisez tous les noms de dossiers, noms de fichiers plusieurs fois. Assurez-vous de conserver le contenu de tous les noms tels quels

Maintenant réessayez.

Rajeev K Tomy
la source
désolé, mais la modification du fichier local.xml ne donne aucun résultat. concernant la création d'un module j'ai quelques doutes à ce sujet. Je suis un "novice" de Magento, alors soyez indulgent avec moi. Voici ce que j'ai fait pour créer un nouveau module comme suggéré: Créez ce nouveau dossier: "app \ code \ local \ my_module_name \ etc" Créez le fichier config.xml Ajoutez le contenu que vous m'avez dit dans le "config.xml" fichier Créez un nouveau dossier: "app \ code \ local \ my_module_name \ block \ layer" Créez un nouveau fichier appelé "view.php" Copiez le contenu que vous avez suggéré dans le fichier "view.php". Après cela, j'essaie à nouveau, mais rien ne change. Dois-je manquer quelque chose?
giancarlo
De plus, j'ai découvert cette réponse dans stackexchange qui offre une autre solution: magento.stackexchange.com/questions/31631/… Mais je crois que cela devrait être modifié pour s'adapter aux paramètres de mon modèle.
giancarlo
Non, vos configurations sont fausses. Je mettrai à jour ma réponse pour vous
Rajeev K Tomy
réponse modifiée. Maintenant, c'est un module complet. Sentez-vous libre de l'utiliser. Veuillez noter que vous devez conserver les majuscules telles
quelles
concernant le lien que vous avez indiqué, il n'est pas idéal dans votre cas. Si vous mettez isAnchorà no, puis l'ensemble get de navigation a disparu en couches.
Rajeev K Tomy
5

Je posterai ce qui a fonctionné pour moi comme référence pour les autres

en ajoutant ceci:

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

dans l'onglet de conception personnalisée de chaque catégorie fait l'affaire.

N'oubliez surtout pas de l'ajouter dans la catégorie parent, c'est ce qui m'a fait.

giancarlo
la source
1

La solution enfant non réglé local.xmlfonctionne bien. Veuillez noter que si vous travaillez avec l'édition entreprise, la référence est appelée " enterprisecatalog":

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

Remarque: vous ne trouverez peut-être aucune définition de bloc enfant correspondante dans l'un des principaux XML. Cela est dû au fait que les enfants comme " category_filter" sont créés (codés en dur) en _prepareLayoutfonction de la vue de couche de catalogue correspondante. En utilisant, unsetChildvous pouvez cependant supprimer l'enfant ajouté codé en dur.

Manuel Rülke
la source
0

Ceci fonctionne https://magento.stackexchange.com/a/45249/9951

MAIS

Vous devez également ajouter des modifications à app / design / frontend / rwd / default / template / catalog / layer / view.phtml

comme ça

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

et également besoin de modifications dans /app/code/core/Mage/Catalog/Block/Layer/View.php

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

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

et changer la méthode canShowOptions ()

besoin de changement

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

à

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

et essaye

Alex
la source
0

C'est ce qui a fonctionné pour moi (sur Magento 1.9).

Ajoutez ces lignes sur votre local.xmlfichier:

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