¿Cómo puedo depurar el procesamiento del archivo de diseño en Magento 2?

14

De acuerdo con la especificación del tema de magento 2 sobre el procesamiento de archivos de diseño:

La aplicación Magento procesa los archivos de diseño en el siguiente orden:

1 / Recopila todos los archivos de diseño de los módulos. El orden está determinado por el orden de los módulos en la lista de módulos de app / etc / config.php.

2. / Determina la secuencia de temas heredados [, ...,]

3. / Itera la secuencia de temas del último antepasado al actual:

a. Agrega todos los archivos de diseño de tema extendido a la lista.

si. Reemplaza los archivos de diseño anulados en la lista.

4. / Fusiona todos los archivos de diseño de la lista.

¿Cómo puedo depurar y ver el archivo de diseño para cada paso de este proceso?

thienphucvx
fuente
¿Quieres decir dónde poner puntos de quiebre? O que esperarías?
BuskaMuza
Hola gracias. Mi propósito principal es imprimir "combina todos los archivos de diseño" para ver cómo se representa el diseño de magento 2. He agregado mi respuesta como la siguiente.
thienphucvx
@ thienphucvx, utilicé su código pero no puedo crear .xml en var / log. ¿Necesito cambiar algo?
alumno
¿Podría intentar depurar para asegurarse de haber creado ese módulo correctamente como "var_dump something on excute method of observer" para verificar si funciona o no?
thienphucvx
1
Eche un vistazo a esta aplicación de desarrollador, puede ayudarlo en el proceso de depuración: github.com/magespecialist/mage-chrome-toolbar
Phoenix128_RiccardoT

Respuestas:

15

Finalmente, puedo imprimir todo el diseño xml cargado y saber cómo está funcionando el diseño de magento 2. También nos ayuda a verificar si nuestro diseño de módulo personalizado está cargado o no. La idea es:

  • Escuchamos un evento " layout_generate_blocks_after " y obtenemos todo el árbol cargado desde ese punto.

  • Guarde todo el árbol cargado en un archivo xml.

1 / Creamos un nuevo directorio Sample/Dev. Cree Sample/Dev/registration.phppara declarar con Magento 2 sobre nuestro directorio de módulos.

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Sample_Dev',
    __DIR__
);

2 / Crear Sample/Dev/etc/module.xml: para que Magento 2 conozca la versión de configuración de nuestro módulo

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="module.xsd">
    <module name="Sample_Dev" setup_version="1.0.0" schema_version="1.0.0" release_version="1.0.1">
    </module>
</config>

3 / Crear Sample/Dev/etc/frontend/events.xml. En este archivo, escucharemos el evento "layout_generate_blocks_after"

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">

    <event name="layout_generate_blocks_after">
        <observer name="thienphucvx_layout_generate_blocks_after" instance="Sample\Dev\Model\Layout" />
    </event>

</config>

4 / Crear Sample/Dev/Model/Layout.phpcon el contenido de la siguiente manera

<?php

namespace Sample\Dev\Model;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class Layout  implements ObserverInterface
{
    protected $_logger;
    public function __construct ( \Psr\Log\LoggerInterface $logger
    ) {
        $this->_logger = $logger;
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $xml = $observer->getEvent()->getLayout()->getXmlString();
        /*$this->_logger->debug($xml);*//*If you use it, check ouput string xml in var/debug.log*/
        $writer = new \Zend\Log\Writer\Stream(BP . '/var/log/layout_block.xml');
        $logger = new \Zend\Log\Logger();
        $logger->addWriter($writer);
        $logger->info($xml);
        return $this;
    }
}

5 / Configurar nuevo módulo. En el directorio de su sitio web. ingrese la línea de comando CMD:

- Módulo php bin / magento: active Sample_Dev

- configuración de php bin / magento: actualización

6 / Actualice la página en la que desea ver el archivo xml (por ejemplo: su página de inicio) y verifique el archivo xml de su controlador var/log/layout_block.xml.

thienphucvx
fuente
Acabo de encontrar esto y es increíble. ¿Te importaría enviar un RP a Magento 2 para que todos puedan tener esta función? Incluso lanzar un módulo ayudaría enormemente.
mbalparda
Hola Mbalparda, no se como hacerlo. ¿Podrías ayudarme a enviarlo?
thienphucvx
Sí, te pellizcó en Twitter.
mbalparda
1
¿Dónde está el problema / solicitud de extracción para la votación? enlace ?
Bernhard Zürn