Come posso eseguire il debug dell'elaborazione dei file di layout in Magento 2?


14

Secondo le specifiche del tema magento 2 sull'elaborazione dei file di layout:

L'applicazione Magento elabora i file di layout nel seguente ordine:

1 / Raccoglie tutti i file di layout dai moduli. L'ordine è determinato dall'ordine dei moduli nell'elenco dei moduli da app / etc / config.php.

2. / Determina la sequenza dei temi ereditati [, ...,]

3. / Iuta la sequenza di temi dall'ultimo antenato all'attuale:

un. Aggiunge tutti i file di layout del tema estesi all'elenco.

b. Sostituisce i file di layout sovrascritti nell'elenco.

4. / Unisce tutti i file di layout dall'elenco.

Come posso eseguire il debug e visualizzare il file di layout per ogni passaggio di questo processo?


Vuoi dire dove mettere i punti di interruzione? O cosa ti aspetteresti?
BuskaMuza,

Ciao, grazie. Il mio scopo principale è stampare "unisce tutti i file di layout" per vedere come viene eseguito il rendering del layout di Magento 2. Ho aggiunto la mia risposta come di seguito.
thienphucvx,

@ thienphucvx, ho usato il tuo codice ma non riesco a creare .xml su var / log. Devo cambiare qualcosa?
studente

Potresti provare a eseguire il debug per assicurarti di aver creato quel modulo correttamente come "var_dump qualcosa sul metodo excute dell'osservatore" per verificare se funziona o no?
thienphucvx,

1
Dai un'occhiata a questa app per sviluppatori, che potrebbe aiutarti nel processo di debug: github.com/magespecialist/mage-chrome-toolbar
Phoenix128_RiccardoT

Risposte:


15

Infine, posso stampare tutto il layout xml caricato e sapere come funziona il layout di Magento 2. Ci aiuta anche a verificare se il nostro layout del modulo personalizzato è caricato o meno. L'idea è:

  • Ascoltiamo un evento " layout_generate_blocks_after " e otteniamo tutti gli alberi caricati da quel punto.

  • Salva tutto l'albero caricato in un file xml.

1 / Creiamo una nuova directory Sample/Dev. Crea Sample/Dev/registration.phpper dichiarare con Magento 2 sulla nostra directory dei moduli.

<?php

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

2 / Crea Sample/Dev/etc/module.xml: per far conoscere Magento 2 sulla versione di installazione del nostro modulo

<?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 / Crea Sample/Dev/etc/frontend/events.xml. In questo file, ascolteremo l'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 / Crea Sample/Dev/Model/Layout.phpcon il contenuto come di seguito

<?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 / Imposta nuovo modulo. Nella directory del sito Web di casa. inserire la riga di comando CMD:

- modulo php bin / magento: abilita Sample_Dev

- installazione php bin / magento: aggiornamento

6 / Aggiorna la pagina in cui vuoi vedere il file xml (ad esempio: la tua home page) e controlla il tuo file xml handle var/log/layout_block.xml.


Mi sono appena imbattuto in questo ed è incredibile. Ti dispiacerebbe inviare un PR a Magento 2 in modo che tutti possano avere questa funzione? Anche il rilascio di un modulo sarebbe di grande aiuto.
mbalparda,

Ciao Mbalparda, non so come farlo. Potresti aiutarmi a inviarlo?
thienphucvx,

Sì, ti ho chiamato su Twitter.
mbalparda,

1
dov'è il problema / richiesta pull per l'upgrade? link?
Bernhard Zürn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.