Como sobrescrever um arquivo de Layout XML no Magento 2
Desenvolvimento, Magento 2
Atualizado em 20 de junho de 2022
Em alguns casos queremos sobrescrever completamente um arquivo de layout XML e não apenas mesclar outro arquivo nele. Isso é feito geralmente quando precisamos modificar muitas partes do arquivo original.
Existem basicamente: dois tipos de situações:
- Sobrescrever arquivos de layout base de um módulo
- Sobrescrever arquivos de layout base de um tema pai
- Quando sobrescrever um arquivo de layout
E vamos sobrescrever estes arquivos através de um novo arquivo de layout inserido no nosso tema.
Para fazer isso você deve criar uma pasta chamada override
dentro do nosso tema, como veremos neste artigo.
⭐️ Este artigo faz parte da série sobre layout XML no Magento 2.
Sobrescrevendo layout xml de um módulo
Era uma vez um módulo que imprimia as faturas em PDF, chamado Magestore_Pdfinvoiceplus
. Este módulo possui um arquivo de layout chamado default.xml
localizado em view/base/layout
.
Para sobrescrever o arquivo de layout do módulo dentro do meu tema, bastou criar um novo arquivo default.xml
dentro de app/design/frontend/<namespace>/<tema>/Magestore_Pdfinvoiceplus/layout/override/base/
.
Em resumo
<pasta_do_tema> |__/<Modulo_Que_Vamos_Sobrescrever> |__/layout |__/override |__/base |--<layout1>.xml |--<layout2>.xml
Sobrescrevendo layout xml do tema pai
Para sobrescrever um layout XML de um tema pai, ou seja, do tema que o seu tema herdou, fazemos:
<app/design/frontend/namespace/nossotema> |__/<Namespace_ModuloQueVamosSobrescrever> |__/layout |__/override |__/theme |__/<Vendor_TemaPai> |__/<NomeTemaPai> |--<layout1>.xml |--<layout2>.xml
Exemplo
Supondo que eu tenha um tema chamado Magenteiro_Natal
cujo pai é o Magento/luma
. Dentro do tema Luma ele tem uma pasta chamada Magento_Theme
onde ele atualiza (sem sobrescrever) o arquivo de layout default.xml
localizado neste módulo.
vendor/magento/theme-frontend-luma/Magento_Theme/ ├── layout │ ├── default.xml │ └── default_head_blocks.xml ...
Supondo que queremos sobrescrever totalmente apenas o default.xml
do nosso tema Luma, podemos adicionar um novo default.xml
dentro de app/design/frontend/Magenteiro/Natal/Magento_Theme/layout/override/theme/Magento/luma
.
Quando sobrescrever um arquivo de layout
Na maioria das vezes a abordagem acima não deve ser utilizada. Isso porque o Magento possuí o recurso de estender arquivos de layout XML ao invés de sobrescrevê-los.
No entanto, nem todas as customizações podem ser realizadas estendendo estes XML’s. Da mesma forma, em casos onde a modificação é muito extensa, talvez seja mais vantajoso sobrescrever o arquivo inteiro.
Exemplos de caso onde temos que sobrescrever layouts
- Modificar argumentos de métodos chamados no XML
- Cancelar uma instrução de remoção de um block ou container feita usando o atributo remove.
- Para definir atributos de blocks e containers via XML
- Embora alguns atributos como htmlClass, htmlId, e label podem ser alterados quando se estende um layout XML
- Para remover argumentos que foram passados para um block
- Para impedir um método de ser chamado
- Não seria necessário sobrescrever quando o block tem um método que cancela o efeito do método chamado originalmente. Neste caso você pode adicionar um arquivo de layout que chama o método que cancelaria a chamada do método anterior. (Bizarro né?)
- Para modificar handles ou evitar que eles sejam incluídos (
<update handle="..."/>
) - Remover todas as instruções de um handle específico, declarando um arquivo de layout com um handle vazio (o mais provável).
Tem muito mais…
Este artigo foi uma sugestão do Raphael Pereira – um dos primeiros alunos do Curso de Magento 2 do Magenteiro. Posteriormente editado, adicionando os exemplos acima. Desta vez com base nos questionamentos de outro Magenteiro e grande contribuidor do core do Magento (Leandro Luvisotto).
Conheça a história do Raphael nesta entrevista exclusiva onde ele conta como se tornou um dos primeiros Magenteiros certificados Front End pela Magento no Brasil.
- PagSeguro (PagBank) para Magento 1 recebe a Nova Geração - 9 de abril de 2024
- Recorrência no WooCommerce Sem Plugins Pagos - 28 de janeiro de 2024
- Chargeback. O que é, e como se livrar deles. - 19 de dezembro de 2023
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-2/como-sobrescrever-layoutxml/"]