Eliminar el bloque de bloques estático o el widget de banner a través de la actualización de diseño personalizado

magento.stackexchange https://magento.stackexchange.com//questions/52081

Pregunta

Todas las páginas de categoría de producto en nuestra tienda son Formato de dos columnas (NAV izquierda). Una de nuestras categorías necesita tener un elemento en la columna de la izquierda eliminada. Cada otra página que tiene esta columna de mano izquierda tiene este elemento en él, y debe continuar haciéndolo, pero para estas pocas subcategorías menores.

El desarrollador anterior se estableció para que el elemento estuviera en una pancarta y se coloque con un widget a través del CMS. Está configurado para aparecer en una tonelada de páginas diferentes (por ejemplo,: las categorías están configuradas en todos), y queremos mantenerlo así, para que no tengamos que agregar nuevas categorías a una lista específica, ya que se hacen los nuevos. Por gerentes de productos y WhatNot.

No pude encontrar una manera de eliminar banners ni widgets de una categoría específica, por lo que recrea la bandera como un bloque estático, con la intención de usar la actualización de diseño personalizada para eliminarlo por su nombre.

<reference name="left">
<remove name="my_static_block_id"></remove>
</reference> 

¡Esto no funciona!

También intenté arruinarnos:

<action method="unsetChildren"/>

Esto se eliminó de todo, desde la columna izquierda (no deseable)

¿Hay alguna manera de hacer esto? Tal vez un lugar donde no miré? Gracias.

¿Fue útil?

Solución

Entonces, lo que está tratando de lograr es difícil debido a la forma en que se agregan los widgets, cuando se guarda un widget, su actualización XML se genera automáticamente, sin embargo, el nombre que se genera es solo un hash aleatorio generado en el archivo a continuación. .

mage_widget_model_widget_instance :: generatelayoutupdatexml

$hash = Mage::helper('core')->uniqHash();
$xml .= '<block type="' . $this->getType() . '" name="' . $hash . '"' . $template . '>';

Esto se guarda más tarde en la base de datos, por ejemplo, en mi caso, el nombre aleatorio fue 9D10A0D6931D18586A907B201633D878 que puede ver está en la imagen de abajo.

ingrese la descripción de la imagen aquí

Aunque probablemente no sea muy práctico hacerlo en teoría, hay una forma en que podría hacer esto sin tocar ningún código, podría crear la búsqueda de widgets para el registro de actualización en la tabla de la base de datos GeneracDicetAgCode Obtenga su nuevo nombre de bloque y luego haga Por ejemplo, core_layout_update, sin embargo, si realiza algún cambio en el widget, el XML y el nombre se actualificarán y deberá actualizar las referencias de nombre una vez más. Intenté desactivado y eso no pareció trabajar, sospecho que se debe a la orden en que se procesa el XML para los widgets.

Creo que tiene dos opciones reales:

1) Agregue un nuevo texto_list a la columna izquierda, columna derecha o en cualquier otro lugar desee agregar widgets y luego Mabey elimínelos en una página. Puedes hacer esto en tus temas local.xml así.

    <reference name="left">
<block type="core/text_list" name="widgets_left" as="widgets_left" translate="label">
                        <label>Widgets Left</label>
                    </block>
</reference>

Esto agregará una nueva opción en el backend, ya que en la imagen que puede agregar instancias de widget también o simplemente eliminar si necesita por nombre, ya que tiene el nombre de widgets_left como referencia.

e.g ingrese la descripción de la imagen aquí

Puede hacerlo, ya sea en el siguiente en la categoría específica que quiera que se eliminen de:

<reference name="left">
<action method="unsetChild"><name>widgets_left</name></action>
</reference>

<remove name="widgets_left"/>

2) Alternativamente, simplemente podría agregarlos a través de XML como a continuación, pero me parece que quiere el mayor control posible a través de la CMS y por qué no para mí los widgets están infrautilizados. < / p>

<reference name="left">
            <block type="cms/block" name="cms_left_block_name">
                <action method="setBlockId"><block_id>my_block_identifier_from_magento_backend</block_id></action>
            </block>
        </reference>

Tendrá una referencia fija como "cms_left_block_name" que puede usar para realizar un remove o desactivación.

Otros consejos

Está cerca, debe saber el nombre del bloque agregado, y el nombre de su padre.

Por ejemplo, un bloque agregado al bloque padre "Izquierda" de la siguiente manera:

<reference name="left">
    <block type="cms/block" name="my_block_name">
         <action method="setBlockId"><block_id>some_static_block_identifier</block_id></action>
    </block>
</reference>

se eliminaría de la siguiente manera:

<reference name="left">
    <action method="unsetChild"><child>my_block_name</child></action>
</reference>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top