Comment déboguer le traitement des fichiers de mise en page dans Magento 2?

14

Selon la spécification du thème magento 2 sur le traitement des fichiers de mise en page:

L'application Magento traite les fichiers de mise en page dans l'ordre suivant:

1 / Collecte tous les fichiers de mise en page des modules. L'ordre est déterminé par l'ordre des modules dans la liste des modules de app / etc / config.php.

2. / Détermine la séquence des thèmes hérités [, ...,]

3. / Itère la séquence des thèmes du dernier ancêtre au courant:

une. Ajoute tous les fichiers d'extension de disposition de thème à la liste.

b. Remplace les fichiers de présentation remplacés dans la liste.

4. / Fusionne tous les fichiers de mise en page de la liste.

Comment puis-je déboguer et afficher le fichier de mise en page pour chaque étape de ce processus?

thienphucvx
la source
Voulez-vous dire où mettre les points d'arrêt? Ou à quoi vous attendriez-vous?
BuskaMuza
Bonjour merci. Mon objectif principal est d'imprimer "fusionne tous les fichiers de mise en page" pour voir comment la mise en page de magento 2 est rendue. J'ai ajouté ma réponse comme ci-dessous.
thienphucvx
@ thienphucvx, j'ai utilisé votre code mais je n'arrive pas à créer .xml dans var / log. Dois-je changer quelque chose?
apprenant
Pourriez-vous essayer de déboguer pour vous assurer que vous avez créé ce module correctement comme "var_dump quelque chose sur la méthode d'observateur excute" pour vérifier si cela fonctionne ou non?
thienphucvx
1
Jetez un œil à cette application développeur, elle peut vous aider dans le processus de débogage: github.com/magespecialist/mage-chrome-toolbar
Phoenix128_RiccardoT

Réponses:

15

Enfin, je peux imprimer toute la mise en page xml chargée et savoir comment fonctionne la mise en page magento 2. Cela nous aide également à vérifier si notre disposition de module personnalisée est chargée ou non. L'idée est:

  • Nous écoutons un événement " layout_generate_blocks_after " et obtenons tout l'arborescence chargée à partir de ce point.

  • Enregistrez toute l'arborescence chargée dans un fichier xml.

1 / Nous créons un nouveau répertoire Sample/Dev. Créez Sample/Dev/registration.phppour déclarer avec Magento 2 sur notre répertoire de modules.

<?php

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

2 / Créer Sample/Dev/etc/module.xml: pour informer Magento 2 de la version de configuration de notre module

<?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 / Créer Sample/Dev/etc/frontend/events.xml. Dans ce fichier, nous écouterons l'événement «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 / Créez Sample/Dev/Model/Layout.phpavec le contenu comme ci-dessous

<?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 / Mettre en place un nouveau module. Dans le répertoire de votre site Web personnel. entrez la ligne de commande CMD:

- module php bin / magento: activez Sample_Dev

- Configuration php bin / magento: mise à niveau

6 / Actualisez la page que vous souhaitez voir le fichier xml (par exemple: votre page d'accueil) et archivez votre fichier xml de poignée var/log/layout_block.xml.

thienphucvx
la source
Je viens de découvrir cela et c'est incroyable. Souhaitez-vous soumettre un PR à Magento 2 pour que tout le monde puisse avoir cette fonctionnalité? Même la publication d'un module aiderait énormément.
mbalparda
Salut Mbalparda, je ne sais pas comment faire. Pourriez-vous m'aider à le soumettre?
thienphucvx
Yep vous a cinglé sur Twitter.
mbalparda
1
où est la question / pull-request pour le vote? lien ?
Bernhard Zürn