Magento 2

Como sobrescrever um template “phtml” no Magento 2

Como sobrescrever um template “phtml” no Magento 2 utilizando um Módulo e arquivo xml de layout.

Uma das tarefas mais comuns para um desenvolvedor do Magento 2 é substituir um template por uma versão customizada.

O Magento 2 torna essa tarefa fácil na maioria dos casos, mas há alguns casos que deixarão você se perguntando se é mesmo possível fazer isso.

Primeiro o módulo

Neste exemplo irei utilizar um módulo como base para fazer o override.

Caso você não saiba como criar uma estrutura básica de um módulo no Magento 2 clique neste link: Como criar um Módulo no Magento 2

Neste exemplo iremos substituir o template “phtml” da lista de desejos “wishlist”.

Utilizando o Layout Block Argument

Layout: O Magento implementa o padrão de arquitetura Model-view-controller; o que significa que o software Magento é projetado em camadas, incluindo a camada de exibição.

A maior parte da camada de exibição do Magento é o layout. Funcionalmente, o layout é uma estrutura de página, representada por hierarquia de elementos (árvore de elementos), que pode ser de dois tipos: blocos e contêineres.

Tecnicamente, o layout é definido nos arquivos .xml, que contêm declarações de elementos e instruções de manipulação de elementos.

Vamos ao código..

Usando o diretório de um módulo como base crie o seguinte arquivo e pastas necessárias.

view/frontend/layout/wishlist_index_index.xml

Ficando:

Vendor/Module/view/frontend/layout/wishlist_index_index.xml

Conteúdo do wishlist_index_index.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="customer.wishlist">
            <arguments>
                <argument name="template" xsi:type="string">Vendor_Module::view.phtml</argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

Repare no caminho: Vendor_Module::view.phtml

Utilizando um argumento passamos o novo arquivo de template que desejamos utilizar.

Para concluir, vamos criar agora o arquivo view.phtml no seguinte diretório.

view/frontend/templates/view.phtml

Não esqueça de alterar Vendor_Module:: de acordo com seu módulo.

Esvazie o cache da loja e verifique se o novo template está sendo utilizado.

Outros templates

Para alterar outros templates você devera alterar o nome do bloco de referência e do arquivo de layout xml, exemplo:

Formulário de login:

...
  <referenceBlock name="customer_form_login">
    ...

E nome do arquivo de layout xml: customer_account_login.xml

Para versões antigas do Magento 2

Código obsoleto para sobrescrever um template nas primeiras versões do 2.0

<?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="customer.wishlist">
            <action method="setTemplate">
                <argument name="template" xsi:type="string">Vendor_Module::view.phtml</argument>
            </action>
        </referenceBlock>
    </body>
</page>

Conclusão de como sobrescrever um template

Código acima não funcionou no seu ambiente de desenvolvimento? Testado nas versões 2.1.x e 2.0.x.

Dúvidas? Faça um comentário ou entre em contato.

Bom desenvolvimento!

Post Recentes

Cron do Magento 2 não roda: status missed e pending no cron_schedule

Pedido que não fatura e e-mail que não sai porque todo job fica missed: como ler a cron_schedule, conferir o…

13 horas atrás

Gerar slug de URL em PHP: acento, espaço e símbolo fora do endereço

Uma função curta em PHP 8.3 que transforma Camiseta Preta Tamanho GG em camiseta-preta-tamanho-gg, sem depender do locale do servidor.

1 dia atrás

Log de consentimento LGPD: a tabela MySQL que guarda a prova do aceite

O banner registra o clique só no navegador e some. Veja a tabela MySQL e o endpoint que gravam a…

2 dias atrás

Comando CLI Magento 2: criar a classe e registrar no di.xml

A classe do comando existe e o bin/magento list ignora ela. Falta o registro no di.xml: aqui vai a classe…

3 dias atrás

Traduzir o pt_BR.csv do Magento 2 em lote sem perder a coluna de origem

Como traduzir duas mil linhas do pt_BR.csv do Magento 2 lendo com fgetcsv e regravando com fputcsv, sem encostar na…

3 dias atrás

Variação não está disponível no WooCommerce: limpar transients e lookup

Produto variável respondendo "Desculpe, este produto não está disponível" mesmo com a variação ativa: limpe os transients do WooCommerce e…

4 dias atrás