Cursos Magento

Sobrescrevendo arquivos de template

,

Publicado em 06 de maio de 2020

Cada página Magento é composta por diversos blocos. De forma geral, cada bloco é representado por uma classe PHP e um arquivo de template com extensão PHTML.

Por fim, a forma como estes blocos são inseridos e organizados é feita através de arquivos de Layout XML.

Embora seja fácil encontrar qual arquivo phtml é preciso alterar, jamais devemos modificar diretamente um arquivo de um tema e principalmente do core do Magento (localizados em /vendor ou /app/design/frontend/Magento).

Existem várias formas de se fazer isso e garantir que nossa loja continue funcionando nas próximas atualizações do Magento ou do nosso tema.

Neste artigo veremos como sobrescrever um arquivo de template .phtml através de um módulo criado por nós.

Veja os passos que vamos seguir aqui:

  1. Criar um módulo do zero
  2. Localizar o arquivo de template que queremos alterar e onde ele foi inserido
  3. Criar uma atualização de Layout e um novo arquivo phtml pra ele

Criando o módulo

Para fins de exemplo, criarei o módulo Magenteiro_OverridePhtml. Caso não esteja familiarizado(a) com a criação de módulos, veja como criar a estrutura básica de um módulo Magento 2.

Localizando o arquivo que queremos alterar

Para fins de exemplo, gostaria de alterar o template que insere aquela caixa de e-mail para assinar a newsletter do Magento. Após ativar as dicas de template, pude ver que o arquivo que quero alterar está localizado em /vendor/magento/module-newsletter/view/frontend/templates/subscribe.phtml.

Atualização de Layout dentro do meu módulo

Antes de criar um arquivo de atualização, é preciso entender quando este componente foi inserido na página. Isto é, qual layout handle foi usado. Caso contrário, eu corro o risco de realizar uma atualização em apenas uma das páginas.

Eu posso usar uma das ferramentas de desenvolvimento que me auxiliariam a encontrar esta atualização de layout. No entanto, no meu caso, farei apenas uma busca geral por subscribe.phtml em todos os XML’s da minha loja. Desta forma poderei rapidamente saber quem fez a inserção deste arquivo.

Busca por subscribe.phtml em todos os arquivos .xml da minha loja

Note que o nome do arquivo encontrado é ‘default.xml’. No Magento 2 o nome do arquivo corresponde ao layout handle que está sendo alterado. Quando o handle default é usado, a atualização de layout é feita em todas as páginas. Ou seja, a newsletter será inserida em todas as páginas.

Sobrescrevendo o phtml

Dentro do nosso módulo, criaremos o arquivo /view/frontend/layout/default.xml e dentro dele faremos a substituição do template phtml. Também duplicaremos o arquivo phtml com as modificações que queremos dentro de /view/frontend/templates/subscribe.phtml.

Na internet você encontrará duas formas de fazer esta atualização, e uma delas é apontada como “deprecated” ou “obsoleta”. No entanto, a forma obsoleta é a única que funciona em boa parte dos casos, conforme reportado em 2016 neste bug report ainda sem solução (Abr/2020).

Veja as duas formas:

<?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="form.subscribe">
            <!--Método 1-->
            <!--<arguments>
                <argument name="template" xsi:type="string">Magenteiro_OverridePhtml::subscribe.phtml</argument>
            </arguments>-->

            <!--Método 2 (obsoleto?)-->
            <action method="setTemplate">
                <argument name="template" xsi:type="string">Magenteiro_OverridePhtml::subscribe.phtml</argument>
            </action>
        </referenceBlock>
    </body>
</page>

No caso da nossa newsletter somente o segundo método funcionou, por isso o primeiro foi comentado.

Importante

Outro ponto importante quando estamos sobrescrevendo atualizações de layout XML feitas por módulos, é garantir que as atualizações de layout do módulo que está sendo sobrescrito venham antes das nossas alterações no processo de mesclagem de XML’s do Magento.

Isso é feito adicionando o módulo em questão na <sequence> do nosso etc/module.xml.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Magenteiro_OverridePhtml" setup_version="1.0.0">
        <sequence>
            <module name="Magento_Newsletter"/>
        </sequence>
    </module>
</config>

Resultado

Feito isso, logo poderemos ver o nosso arquivo de template sendo carregado no lugar do antigo.

Há ainda outras formas de se sobrescrever um template, como por exemplo com o uso de Plugins, Preferences e outras formas. Embora Plugins e Preferences sejam tópicos abordados no nosso curso de Magento 2, há um artigo muito bom da Classy Llama (em Inglês) que aborda em detalhes outras formas de se fazer isso.

Por fim, caso queira fazer download do módulo desenvolvido neste exemplo, preencha seu nome e e-mail abaixo.

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

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/sobrescrevendo-arquivos-de-template/"]