Cursos Magento

Como sobrescrever um arquivo de Layout XML no 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:

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.

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/como-sobrescrever-layoutxml/"]