Ausblenden oder Entfernen des Kategoriefilters in der geschichteten Navigation

8

Ich habe Probleme, den Kategoriefilter aus der Ebene zu entfernen, da meine neue Website bereits ein Dropdown-Menü für Kategorien enthält, sodass nur Platz verschwendet wird (und meine Kunden verwirrt werden).

Ich weiß, dass dieses Problem bereits viele Male gestellt und bereits gelöst wurde, aber ich habe jede Lösung ohne Erfolg ausprobiert. Ich glaube, dass dies mit der benutzerdefinierten Vorlage zusammenhängt, die ich für die Website verwende.

Nachdem ich mir meine Datei local.xml (in meinem Vorlagenordner) angesehen habe, glaube ich, dass ich diese Zeilen umgehen sollte:

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

Der erste Blocktyp sollte das Kategoriemenü sein (und damit bin ich einverstanden). Der zweite Blocktyp erstellt das Menü "Filtern nach" direkt unter dem Kategoriemenü, und ich bin mir ziemlich sicher, dass das Problem hier liegt.

Ich glaube, ich sollte etwas in der "catalog.leftnav" deaktivieren, aber selbst wenn ich versuche, diesen Code hinzuzufügen:

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

nichts passiert. Was mache ich falsch?

Giancarlo
quelle
Sie müssen nur Kategorieabschnitte aus der geschichteten Navigation vermeiden und möchten keine anderen Filter vermeiden?
Rajeev K Tomy
genau! aber ich werde verrückt, um herauszufinden, wie ...
Giancarlo
Sollte sich local.xml nicht im Layoutordner befinden, nicht im Vorlagenordner?
Yumecosmos

Antworten:

14

Basierend auf stackexchange.com Antwort:
Wenn Sie dies über XML tun möchten, sollten Sie catalog.xml bearbeiten

ersetzen:

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

mit diesem:

<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
quelle
Ja, eine klassische saubere Methode, + 1 dafür
Rajeev K Tomy
1
Ich habe es versucht, aber es funktioniert einfach nicht. Ich glaube, dass dies mit meiner benutzerdefinierten Vorlage zusammenhängt. In meiner Vorlage "catalog.xml" gibt es diese Zeilen nicht. Wie auch immer, ich habe in stackexchange gelesen, dass die richtige Methode darin besteht, mit der Datei "local.xml" zu arbeiten. Können Sie mir außer der Methode -.xml- einen anderen Weg vorschlagen, um das gewünschte Ergebnis zu erzielen?
Giancarlo
Was ist der Unterschied zwischen <alias> und <child>? Für mich beide Werke ...
versedi
In diesem speziellen Fall gibt es keinen Unterschied. Sie können sogar <action method = "unsetChild"> <xyz> category_filter </ xyz> </ action>
Amasty
Wenn Sie wie ich versucht haben, dies in Ihre local.xml einzufügen, wird möglicherweise diese Art von Fehler angezeigt ... "Sie können einen Korrelationsnamen 'mycustomattribute' nicht mehr als einmal definieren", da das Modul catalog / layer_view hier zweimal aufgerufen wird. stackoverflow.com/questions/10524017/… Verwenden Sie den von giancarlo unten angegebenen Code <reference name="catalog.leftnav"> <action method="unsetChild"><alias>category_filter</alias></action> </reference>, fügen Sie ihn jedoch in local.xml ein. Dies funktionierte für mich am 1.8
Tofuwarrior
5

Versuchen Sie zuerst diesen Code. Hier versuchen wir dies über das Layout XML Update zu entfernen

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

Dies wird Ihr Problem lösen.

Wenn es nicht funktioniert hat, müssen Sie einen Block neu schreiben. Dazu müssen Sie ein Modul erstellen. Der Block, den Sie neu schreiben müssen, ist Mage_Catalog_Block_Layer_View.

Die Aktivierungsdatei des Moduls sieht folgendermaßen aus

Datei : app/etc/modules/Avoid_CategoryFromLN.xml

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

So sieht das Umschreiben der Konfiguration aus

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

Jetzt sollte Ihr Umschreibblock diesen Inhalt besitzen

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

Hier getFilters()ist die Methode, die tatsächlich Kategoriefilter in geschichteten Navigationsfiltern enthält. Wir entfernen diesen Code einfach, indem wir die Kernklasse neu schreiben. Das ist es.

Großer Hinweis :: Sie sollten Großbuchstaben so lassen, wie sie sind. Mach ihnen keine kleinen Buchstaben. Wenn Sie dies tun, wird es nicht funktionieren. Magento ist in diesen Dingen streng :) Überarbeiten Sie also alle Ordnernamen und Dateinamen mehrmals. Stellen Sie sicher, dass Sie den Inhalt aller Namen unverändert lassen

Versuchen Sie es jetzt erneut.

Rajeev K Tomy
quelle
Entschuldigung, aber das Bearbeiten der Datei local.xml führt zu keinen Ergebnissen. In Bezug auf die Erstellung eines Moduls habe ich einige Zweifel. Ich bin ein magento "Neuling", also bitte ertrage es mit mir. Ich habe Folgendes getan, um ein neues Modul wie vorgeschlagen zu erstellen: Erstellen Sie diesen neuen Ordner: "app \ code \ local \ my_module_name \ etc". Erstellen Sie die Datei config.xml. Fügen Sie den Inhalt hinzu, den Sie mir in der Datei "config.xml" mitgeteilt haben. Datei Erstellen Sie einen neuen Ordner: "app \ code \ local \ my_module_name \ block \ layer". Erstellen Sie eine neue Datei mit dem Namen "view.php". Kopieren Sie den Inhalt, den Sie in der Datei "view.php" vorgeschlagen haben. Danach versuche ich es noch einmal, aber nichts ändert sich. Vermisse ich etwas
Giancarlo
Außerdem habe ich diese Antwort in stackexchange entdeckt, die eine andere Lösung bietet: magento.stackexchange.com/questions/31631/… Ich bin jedoch der Meinung, dass dies geändert werden sollte, um meinen Vorlageneinstellungen zu entsprechen.
Giancarlo
Nein, deine Kondfigurationen sind falsch. Ich werde meine Antwort für Sie aktualisieren
Rajeev K Tomy
bearbeitete Antwort. Jetzt ist es ein komplettes Modul. Fühlen Sie sich frei, es zu benutzen. Bitte beachten Sie, dass Sie Großbuchstaben behalten müssen, wie es ist
Rajeev K Tomy
In Bezug auf den Link, auf den Sie hingewiesen haben, ist er in Ihrem Fall nicht ideal. Wenn Sie setzen isAnchorauf no, dann verschwand die gesamte Schicht Navigation erhalten.
Rajeev K Tomy
5

Ich werde aufschreiben, was es für mich als Referenz für andere funktioniert hat

Hinzufügen dieser:

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

Auf der Registerkarte "Benutzerdefiniertes Design" aller Kategorien wird der Trick ausgeführt.

Denken Sie daran, es besonders in die übergeordnete Kategorie aufzunehmen, das hat es für mich getan.

Giancarlo
quelle
1

Die nicht eingestellte untergeordnete Lösung local.xmlfunktioniert gut. Bitte beachten Sie, dass bei der Arbeit mit Enterprise Edition die Referenz " enterprisecatalog" heißt:

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

Randnotiz: Möglicherweise finden Sie in keinem der XML-Kernelemente entsprechende untergeordnete Blockdefinitionen. Dies liegt daran, dass untergeordnete Elemente wie " category_filter" in _prepareLayoutAbhängigkeit von der entsprechenden Katalogschichtansicht erstellt (fest codiert) werden . Mit können unsetChildSie jedoch das fest codierte hinzugefügte untergeordnete Element entfernen.

Manuel Rülke
quelle
0

Dies funktioniert unter https://magento.stackexchange.com/a/45249/9951

ABER

Außerdem müssen Änderungen an app / design / frontend / rwd / default / template / catalog / layer / view.phtml hinzugefügt werden

so was

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

Außerdem müssen Änderungen an /app/code/core/Mage/Catalog/Block/Layer/View.php vorgenommen werden

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

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

und Änderungsmethode canShowOptions ()

brauche Veränderung

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

zu

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

und versuche

Alex
quelle
0

Dies hat bei mir funktioniert (unter Magento 1.9).

Fügen Sie Ihrer local.xmlDatei folgende Zeilen hinzu :

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