Layout XML do Magento 2: remover bloco de módulo de terceiro

Instalou um módulo de terceiro e ele plantou um banner de promoção no topo de todas as páginas. O resto do módulo funciona e você não quer desinstalar, quer só sumir com aquele bloco. Uma linha de layout XML dentro do seu tema resolve, sem encostar em nada dentro de vendor/.

Primeiro descubra o nome do bloco

Sem o nome exato você não remove nada. Ligue os hints numa cópia de homologação: deploy:mode:set developer limpa cache e conteúdo estático gerado, então não rode isso na loja que está vendendo.

sudo -u www-data bin/magento deploy:mode:set developer
sudo -u www-data bin/magento config:set dev/debug/template_hints_storefront 1
sudo -u www-data bin/magento config:set dev/debug/template_hints_blocks 1
sudo -u www-data bin/magento cache:flush

Recarregue a loja: cada caixa vermelha passa a mostrar o template e o nome do bloco, algo como fornecedor.promo.banner. É esse nome que vai para o XML.

O remove no layout do tema

Crie o arquivo app/design/frontend/SuaVendor/seutema/Magento_Theme/layout/default.xml:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="fornecedor.promo.banner" remove="true"/>
    </body>
</page>

Depois é só limpar: bin/magento cache:clean layout block_html full_page. O default.xml pega o site inteiro; se o banner só aparece na página do produto, o arquivo certo é catalog_product_view.xml e o efeito fica restrito ali.

remove=”true” não é display=”false”

Aqui mora a pegadinha que já me custou uma tarde. O remove tira o bloco e todos os filhos dele da árvore de layout: a classe nem chega a ser instanciada, então some junto qualquer consulta ao banco que aquele bloco fazia. O display=”false” mantém o bloco montado e só não imprime a saída, o que serve quando outro bloco depende dele.

A remoção é aplicada depois do merge de todos os layouts, então referenciar o bloco em outro arquivo não traz ele de volta: para reverter, apague o seu referenceBlock (ou troque para remove=”false”) e limpe o cache. Terminou de caçar o nome? Devolva os dois config:set para 0, rode cache:flush e volte a loja para production mode.

Dúvidas? Faça um comentário logo abaixo ou envie uma mensagem clicando aqui.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *