Ocultar o eliminar el filtro de "categoría" de la navegación por capas


8

Estoy luchando por eliminar el filtro de categoría de la capa, porque ya tengo un menú desplegable de categoría en mi nuevo sitio web, por lo que será solo una pérdida de espacio (y confundir a mis clientes)

Sé que este problema ya se preguntó muchas veces y ya se resolvió, pero probé todas las soluciones sin éxito. Creo que esto está relacionado con la plantilla personalizada que uso para el sitio web.

Después de mirar mi archivo local.xml (que se encuentra en mi carpeta de plantillas), creo que debería evitar estas líneas:

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

El primer tipo de bloque debería ser el menú de categoría (y estoy de acuerdo con eso). El segundo tipo de bloque construye el menú "filtrar por", justo debajo del menú de categoría, y estoy bastante seguro de que el problema está aquí.

Creo que debería desarmar algo dentro del "catalog.leftnav" pero incluso si trato de agregar este código:

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

no pasa nada. ¿Qué estoy haciendo mal?


¿solo necesita evitar la sección de categoría de la navegación en capas y no desea evitar otros filtros?
Rajeev K Tomy

¡exactamente! pero me estoy volviendo loco para averiguar cómo ....
giancarlo

¿No debería local.xml estar en la carpeta de diseño, no en la carpeta de plantillas?
Yumecosmos

Respuestas:


14

Basado en la respuesta de stackexchange.com:
si desea hacerlo a través de XML, debe editar catalog.xml

reemplazar:

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

con este:

<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 método de limpieza clásico, + 1 para eso
Rajeev K Tomy

1
Lo intenté, pero simplemente no funciona. Creo que esto está relacionado con mi plantilla personalizada. En mi plantilla "catalog.xml" no hay estas líneas. De todos modos, he leído en stackexchange que el método correcto es trabajar con el archivo "local.xml". Aparte del método -.xml-, ¿puede sugerirme otra forma de lograr el resultado deseado?
giancarlo

¿Cuál es la diferencia entre <alias> y <child>? Para mí ambos trabajos ...
versedi

No hay diferencia en este caso particular. Puede usar incluso <action method = "unsetChild"> <xyz> category_filter </xyz> </action>
Amasty

Si, como yo, intentaste agregar esto a tu local.xml, entonces puedes obtener este tipo de error ... "No puedes definir un nombre de correlación 'mycustomattribute' más de una vez" porque el módulo catalog / layer_view se llama dos veces Explicado aquí: stackoverflow.com/questions/10524017/… Usa el código publicado por giancarlo a continuación, <reference name="catalog.leftnav"> <action method="unsetChild"><alias>category_filter</alias></action> </reference>pero agrégalo a local.xml. esto funcionó para mí el 1.8
Tofuwarrior

5

Prueba este código primero. Aquí estamos tratando de eliminar esto a través de la actualización xml de diseño

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

Esto resolverá su problema.

Si no funcionó, entonces necesita hacer una reescritura de bloque. Para esto necesitas crear un módulo. El bloque que necesitas reescribir es Mage_Catalog_Block_Layer_View.

El archivo de activación del módulo se ve así

Archivo : app/etc/modules/Avoid_CategoryFromLN.xml

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

Así es como se reescribe la configuración

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

Ahora su bloque de reescritura debería poseer este contenido

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

Aquí getFilters()está el método que realmente incluye filtros de categoría dentro del filtro de navegación en capas. Simplemente eliminamos ese código reescribiendo la clase principal. Eso es.

Nota importante: debe mantener las letras mayúsculas tal como están. No les hagas letras pequeñas. Si lo haces, no funcionará. Magento es estricto en estas cosas :) Así que revise todos los nombres de carpetas y nombres de archivos varias veces. Asegúrese de mantener todos los contenidos de los nombres tal como están

Ahora inténtalo de nuevo.


lo siento, pero editar el archivo local.xml no da ningún resultado. con respecto a la creación de un módulo tengo algunas dudas al respecto. Soy un "novato" magento, así que tengan paciencia conmigo. Esto es lo que he hecho para crear un nuevo módulo como se sugiere: Crear esta nueva carpeta: "app \ code \ local \ my_module_name \ etc" Crear el archivo config.xml Agregue el contenido que me dijo en "config.xml" archivo Cree una nueva carpeta: "app \ code \ local \ my_module_name \ block \ layer" Cree un nuevo archivo llamado "view.php" Copie el contenido que sugirió en el archivo "view.php". Después de esto intento de nuevo, pero nada cambia. ¿Echo de menos algo?
giancarlo

Además, descubrí esta respuesta en stackexchange que ofrece otra solución: magento.stackexchange.com/questions/31631/… Pero creo que esto debería modificarse para adaptarse a la configuración de mi plantilla.
giancarlo

No, tus configuraciones son incorrectas. Actualizaré mi respuesta por usted
Rajeev K Tomy

respuesta editada Ahora es un módulo completo. Sientase libre de usarlo. Tenga en cuenta que debe mantener las letras mayúsculas tal como están
Rajeev K Tomy

con respecto al enlace que señaló, no es ideal en su caso. Si pones isAnchora no, a continuación, toda la navegación por capas get desapareció.
Rajeev K Tomy

5

Publicaré lo que funcionó para mí como referencia para otros

agregando esto:

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

en la pestaña de diseño personalizado de cada categoría hace el truco.

Recuerde especialmente agregarlo en la categoría principal, eso es lo que lo hizo por mí.


1

La solución unset-child local.xmlfunciona bien. Tenga en cuenta que si está trabajando con Enterprise Edition, la referencia se llama " enterprisecatalog":

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

Nota al margen: es posible que no encuentre ninguna definición de bloque secundario correspondiente en ninguno de los XML principales. Esto se debe al hecho de que los niños como " category_filter" se crean (codificados) en _prepareLayoutfunción de la vista de capa de catálogo correspondiente. unsetChildSin embargo, al usar puede eliminar el elemento secundario codificado.


0

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

PERO

También es necesario agregar cambios a app / design / frontend / rwd / default / template / catalog / layer / view.phtml

Me gusta esto

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

y también necesita cambios en /app/code/core/Mage/Catalog/Block/Layer/View.php

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

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

y cambie el método canShowOptions ()

necesita cambio

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

a

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

e intenta


0

Esto es lo que funcionó para mí (en Magento 1.9).

Agregue estas líneas en su local.xmlarchivo:

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

  <!-- ... -->
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.