Pergunta

Todas as páginas de categorias de produtos em nossa loja têm formato de duas colunas (navegação para a esquerda).Uma de nossas categorias precisa ter um elemento removido na coluna da esquerda.Todas as outras páginas que possuem esta coluna à esquerda possuem esse elemento e precisam continuar a fazê-lo, exceto para essas poucas subcategorias menores.

O desenvolvedor anterior configurou para que o elemento ficasse em um banner, e posicionado com um widget via CMS.Ele está configurado para aparecer em várias páginas diferentes (por exemplo:Categorias está definido como Todos), e queremos mantê-lo assim para que não tenhamos que adicionar novas categorias a uma lista específica, pois novas são feitas por gerentes de produto e outros enfeites.

Não consegui encontrar uma maneira de remover banners nem widgets de uma categoria específica, então recriei o banner como um bloco estático, pretendendo usar a Atualização de Layout Personalizado para removê-lo pelo nome.

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

Isso não funciona!

Eu também tentei unsetChildren:

<action method="unsetChildren"/>

Isso removeu tudo da coluna da esquerda (não desejável)

Existe alguma maneira de fazer isso?Talvez em algum lugar que eu não olhei?Obrigado.

Foi útil?

Solução

Então, o que você está tentando alcançar é difícil devido à maneira como os widgets são adicionados à página, quando um widget é salvo, sua atualização XML de layout é gerada automaticamente, NO ENTANTO, o nome gerado é apenas um hash aleatório gerado no arquivo abaixo.

Mage_Widget_Model_Widget_Instance::generateLayoutUpdateXml

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

Posteriormente, isso é salvo no banco de dados, por exemplo, no meu caso, o nome aleatório era 9d10a0d6931d18586a907b201633d878, que você pode ver na imagem abaixo.

enter image description here

Portanto, embora provavelmente não seja muito prático fazer isso em teoria, existe uma maneira de fazer isso sem tocar em nenhum código, você pode criar o widget de pesquisa para o registro de atualização na tabela do banco de dados core_layout_update obtenha seu novo nome de bloco e faça, por exemplo <remove name="9d10a0d6931d18586a907b201633d878"/> No entanto, se você fizer qualquer alteração no widget, o XML e o nome serão atualizados e você precisará atualizar as referências de nome mais uma vez.Tentei unsetChild e não pareceu funcionar. Suspeito que seja devido à ordem em que o XML é processado para widgets.

Acho que você tem duas opções reais:

1) Adicione uma nova text_list à coluna esquerda, coluna direita ou em qualquer outro lugar onde você queira adicionar widgets e, em seguida, talvez removê-los de uma página.Você pode fazer isso em seus temas local.xml assim.

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

Isso adicionará uma nova opção no backend como na imagem, que você também pode adicionar instâncias de widget ou apenas remover se precisar pelo nome, pois você tem o nome widgets_left como referência.

por exemploenter image description here

Você pode então fazer o seguinte na categoria específica da qual deseja removê-los:

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

<remove name="widgets_left"/>

2) Alternativamente, você pode simplesmente adicioná-los via XML como abaixo, mas me parece que você deseja o máximo de controle possível por meio do CMS e por que não, para mim, os widgets são subutilizados.

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

Você terá então uma referência fixada como "cms_left_block_name" que pode ser usada para executar uma remoção ou um unsetChild.

Outras dicas

Você está perto, precisa saber o NOME do bloco adicionado e o nome de seu pai.

Por exemplo, um bloco adicionado ao bloco pai "esquerdo" da seguinte forma:

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

Seria removido da seguinte forma:

<reference name="left">
    <action method="unsetChild"><child>my_block_name</child></action>
</reference>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top