Cursos Magento

Como identificar problemas no layout XML no Magento 2

,

Publicado em 04 de dezembro de 2018

Assim como no Magento 1, o Magento 2 também faz extenso uso de Layout XML para montar e modificar páginas em todos os lugares.

No entanto, quando estamos desenvolvendo, muitas vezes nosso arquivo de Layout XML não é processado como esperávamos. Por vezes nossas modificações não são aplicadas, e em outras vezes acabamos por ter erros inesperados por conta de um simples XML recém adicionado.

Neste artigo vou mostrar algumas sugestões de como debugar instruções de layout XML no Magento 2.

Pré-requisito: ter XDebug instalado e funcionando na sua IDE. Não conhece o XDebug? Assista a aula 9 deste meu curso gratuito.

Certifique-se que seu XML está sendo processado

De nada adiantaria corrigir nosso XML se ele nem estiver sendo lido pelo Magento, não é mesmo?

A leitura dos XMLs de Layout são processados em \Magento\Framework\View\Model\Layout\Merge::_loadFileLayoutUpdatesXml. Este método é responsável por coletar e mesclar todos os XML’s de layout.

/**
 * Collect and merge layout updates from files
 *
 * @return \Magento\Framework\View\Layout\Element
 * @throws \Magento\Framework\Exception\LocalizedException
 */
protected function _loadFileLayoutUpdatesXml()
{
    $layoutStr = '';
    $theme = $this->_getPhysicalTheme($this->theme);
    $updateFiles = $this->fileSource->getFiles($theme, '*.xml');
    $updateFiles = array_merge($updateFiles, $this->pageLayoutFileSource->getFiles($theme, '*.xml'));
    $useErrors = libxml_use_internal_errors(true);
    foreach ($updateFiles as $file) {
        /** @var $fileReader \Magento\Framework\Filesystem\File\Read   */
        $fileReader = $this->readFactory->create($file->getFilename(), DriverPool::FILE);
        $fileStr = $fileReader->readAll($file->getName());
        $fileStr = $this->_substitutePlaceholders($fileStr);
        /** @var $fileXml \Magento\Framework\View\Layout\Element */
            $fileXml = $this->_loadXmlString($fileStr);

...

Para ver se nosso arquivo XML está sendo processado, adicionamos um breakpoint condicional dentro do foreach. Mais ou menos assim:

No meu caso o breakpoint só será acionado quando meu XML for processado. Para isso usei stripos($file->getFilename(), 'meuxml.xml') !== false na condição.

Veja se o seu XML não está quebrado

Para isso você pode usar uma ferramenta online ou o xmllint (demonstrado na aula 11 do curso gratuito de ferramentas para Magento) para varrer todos os XMLs.

Garanta que não tem erros sendo exibidos

Ative o modo desenvolvedor e navegue até o front end da loja. É possível que o problema seja mais simples que isso.

E os handles de layout?

Veja se o nome do seu XML corresponde ao handle de layout da página que você quer alterar. Use uma das ferramentas de desenvolvimento para Magento 2 para obter o handle correto. Ou simplesmente olhe o body class no código fonte da página.

Ex: se o handle for cms_page_view, seu xml deve se chamar cms_page_view.xml

Minha classe existe?

Se você estiver adicionando um novo block, certifique-se que ele exista e que o nome da classe está declarado corretamente no XML. Você pode confirmar isso adicionando um breakpoint no __construct ou no começo da classe.

Meu bloco deveria mesmo aparecer?

Às vezes está tudo funcionando, mas o problema é que nosso bloco não devolve html nenhum mesmo.

Uma forma de verificar isso é criando um método temporário _toHtml que retorna o valor do parent::_toHtml().

Coloque um breakpoint lá e depois execute $this->fetchView($this->getTemplateFile()) com o cursor dentro do método parent para ter certeza que o arquivo de template existe.

 

O seu problema era em outro lugar? Comente!

Se nada disso resolveu seu problema, mas você encontrou o problema em outro lugar, deixe um comentário. Ele pode ajudar outros leitores.

 

Este artigo foi inspirado nas soluções apresentadas por Joseph Maxwell citadas em seu guia de estudos para a certificação Magento 2 Professional Developer Study Guide  da SwiftOtter.

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

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/como-identificar-problemas-no-layout-xml-no-magento-2/"]