Nasconde o rimuove il filtro "categoria" dalla navigazione a più livelli


8

Sto lottando per rimuovere il filtro categoria dal livello, perché ho già un menu a discesa categoria nel mio nuovo sito Web, quindi sarà solo uno spreco di spazio (e confondere i miei clienti)

So che questo problema è stato già chiesto molte volte e già risolto, ma ho provato tutte le soluzioni senza successo. Ritengo che ciò sia correlato al modello personalizzato che utilizzo per il sito Web.

Dopo aver esaminato il mio file local.xml (trovato nella mia cartella dei modelli) credo che dovrei aggirare queste righe:

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

Il primo - tipo di blocco - dovrebbe essere il menu delle categorie (e sto bene con quello). Il secondo tipo di blocco crea il menu "filtra per", proprio sotto il menu delle categorie, e sono abbastanza sicuro che il problema sia qui.

Credo che dovrei disinserire qualcosa all'interno di "catalog.leftnav" ma anche se provo ad aggiungere questo codice:

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

non accade nulla. Che cosa sto facendo di sbagliato?


devi solo evitare la sezione delle categorie dalla navigazione a più livelli e non vuoi evitare altri filtri?
Rajeev K Tomy,

Esattamente! ma sto impazzendo per scoprire come ....
giancarlo,

Local.xml non dovrebbe essere nella cartella layout, non nella cartella template?
Yumecosmos,

Risposte:


14

Basato sulla risposta di stackexchange.com:
se si desidera farlo tramite XML, è necessario modificare catalog.xml

sostituire:

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

con questo:

<block type="catalog/layer_view" name="catalog.leftnav" after="currency" template="catalog/layer/view.phtml">  
    <action method="unsetChild"><alias>category_filter</alias></action>
</block>

sì, un metodo classico pulito, + 1 per quello
Rajeev K Tomy,

1
Ci ho provato, ma semplicemente non funziona. Credo che ciò sia legato al mio modello personalizzato. Nel mio modello "catalog.xml" non ci sono queste righe. Ad ogni modo, ho letto in stackexchange che il metodo corretto è lavorare con il file "local.xml". Oltre al metodo -.xml-, puoi suggerirmi un altro modo per ottenere il risultato desiderato?
giancarlo,

Qual è la differenza tra <alias> e <child>? Per me entrambi funzionano ...
versedi

Non c'è differenza in questo caso particolare. Puoi usare anche <action method = "unsetChild"> <xyz> category_filter </xyz> </action>
Amasty

Se come me hai provato ad aggiungere questo nel tuo local.xml potresti avere questo tipo di errore .... "Non puoi definire un nome di correlazione 'mycustomattribute' più di una volta" perché il modulo catalog / layer_view viene chiamato due volte Spiegato qui: stackoverflow.com/questions/10524017/… Utilizza il codice pubblicato da giancarlo di seguito <reference name="catalog.leftnav"> <action method="unsetChild"><alias>category_filter</alias></action> </reference>ma aggiungi in local.xml. questo ha funzionato per me il 1.8
Tofuwarrior il

5

Prova prima questo codice. Qui stiamo provando a rimuoverlo tramite l'aggiornamento xml del layout

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

Questo risolverà il tuo problema.

Se non ha funzionato, è necessario eseguire una riscrittura dei blocchi. Per questo è necessario creare un modulo. Il blocco che devi riscrivere è Mage_Catalog_Block_Layer_View.

Il file di attivazione del modulo è simile al seguente

File : app/etc/modules/Avoid_CategoryFromLN.xml

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

Ecco come appare la riscrittura della configurazione

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

Ora il tuo blocco di riscrittura dovrebbe avere questo contenuto

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

Ecco getFilters()il metodo che include effettivamente i filtri di categoria all'interno del filtro di navigazione a più livelli. Rimuoviamo semplicemente quel codice riscrivendo la classe principale. Questo è tutto.

Nota importante: dovresti tenere le lettere maiuscole così come sono. Non scrivere lettere minuscole. Se lo fai, non funzionerà. Magento è rigoroso in queste cose :) Quindi rivedi tutti i nomi delle cartelle, i nomi dei file più volte. Assicurati di mantenere tutti i contenuti dei nomi così come sono

Ora riprova.


scusa, ma la modifica del file local.xml non dà alcun risultato. riguardo alla creazione di un modulo ne dubito. Sono un "principiante" magento, quindi per favore abbi pazienza. Questo è quello che ho fatto per creare un nuovo modulo come suggerito: Crea questa nuova cartella: "app \ code \ local \ my_module_name \ etc" Crea il file config.xml Aggiungi il contenuto che mi hai detto nel "config.xml" file Crea una nuova cartella: "app \ code \ local \ my_module_name \ block \ layer" Crea un nuovo file chiamato "view.php" Copia il contenuto che hai suggerito nel file "view.php". Dopo questo riprovo, ma non cambia nulla. Mi manca qualcosa?
giancarlo,

Inoltre, ho scoperto questa risposta in stackexchange che offre un'altra soluzione: magento.stackexchange.com/questions/31631/… Ma credo che questo dovrebbe essere modificato per adattarsi alle impostazioni del mio modello.
giancarlo,

no, le tue condfigurazioni sono sbagliate. Aggiornerò la mia risposta per te
Rajeev K Tomy,

risposta modificata. Ora è un modulo completo. Sentiti libero di usarlo. Si prega di notare che è necessario mantenere le maiuscole così come sono
Rajeev K Tomy,

per quanto riguarda il link che hai indicato, non è l'ideale nel tuo caso. Se si mette isAnchora no, allora l'intero get navigazione a strati scomparso.
Rajeev K Tomy,

5

Pubblicherò ciò che ha funzionato per me come riferimento per gli altri

aggiungendo questo:

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

nella scheda di progettazione personalizzata di ogni categoria fa il trucco.

Ricorda soprattutto di aggiungerlo nella categoria genitore, questo è quello che ha fatto per me.


1

La soluzione unset-child in local.xmlfunziona bene. Si noti che se si lavora con Enterprise Edition il riferimento si chiama " enterprisecatalog":

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

Nota a margine: potresti non trovare alcuna definizione di blocco figlio corrispondente in nessuno dei principali XML. Ciò è dovuto al fatto che i bambini come " category_filter" vengono creati (codificati in modo rigido) in _prepareLayoutfunzione della corrispondente vista del livello del catalogo. Usando unsetChildè possibile, tuttavia, rimuovere il figlio aggiunto codificato.


0

Questo è funziona https://magento.stackexchange.com/a/45249/9951

MA

Inoltre, è necessario aggiungere modifiche a app / design / frontend / rwd / default / template / catalog / layer / view.phtml

come questo

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

e anche bisogno di modifiche a /app/code/core/Mage/Catalog/Block/Layer/View.php

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

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

e cambia metodo canShowOptions ()

bisogno di cambiare

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

per

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

e prova


0

Questo è ciò che ha funzionato per me (su Magento 1.9).

Aggiungi queste righe al tuo local.xmlfile:

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

  <!-- ... -->
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.