Wie kann ich die Verarbeitung von Layoutdateien in Magento 2 debuggen?

14

Gemäß der Magento 2-Themenspezifikation zur Verarbeitung von Layoutdateien:

Die Magento-Anwendung verarbeitet Layoutdateien in der folgenden Reihenfolge:

1 / Sammelt alle Layoutdateien von Modulen. Die Reihenfolge richtet sich nach der Modulreihenfolge in der Modulliste aus app / etc / config.php.

2. / Bestimmt die Reihenfolge der geerbten Themen [, ...,]

3. / Durchläuft die Reihenfolge der Themen vom letzten Vorfahren bis zum aktuellen:

ein. Fügt der Liste alle erweiterten Designlayoutdateien hinzu.

b. Ersetzt überschriebene Layoutdateien in der Liste.

4. / Führt alle Layoutdateien aus der Liste zusammen.

Wie kann ich die Layoutdatei für jeden Schritt dieses Prozesses debuggen und anzeigen?

thienphucvx
quelle
Meinen Sie, wo Sie Haltepunkte setzen sollen? Oder was würdest du erwarten?
BuskaMuza
Hallo Danke. Mein Hauptzweck ist das Drucken von "Alle Layoutdateien zusammenführen", um zu sehen, wie Magento 2 Layouts gerendert werden. Ich habe meine Antwort wie folgt hinzugefügt.
Thienphucvx
@ thienphucvx, ich habe Ihren Code verwendet, kann jedoch keine XML-Datei unter var / log erstellen. Muss ich etwas ändern?
Anfänger
Könnten Sie versuchen, ein Debugging durchzuführen, um sicherzustellen, dass Sie das Modul korrekt erstellt haben, z. B. "var_dump something on excute method of observer", um zu überprüfen, ob es funktioniert oder nicht?
Thienphucvx
1
Schauen Sie sich diese Entwickler-App an, sie kann Ihnen beim Debuggen helfen: github.com/magespecialist/mage-chrome-toolbar
Phoenix128_RiccardoT

Antworten:

15

Schließlich kann ich alle geladenen XML-Layouts drucken und wissen, wie Magento 2-Layout funktioniert. Es hilft uns auch zu überprüfen, ob unser benutzerdefiniertes Modullayout geladen ist oder nicht. Die Idee ist:

  • Wir hören uns ein Ereignis " layout_generate_blocks_after " an und holen uns den gesamten geladenen Baum von diesem Punkt.

  • Speichern Sie den gesamten geladenen Baum in einer XML-Datei.

1 / Wir erstellen ein neues Verzeichnis Sample/Dev. Erstellen Sie Sample/Dev/registration.php, um mit Magento 2 über unser Modulverzeichnis zu deklarieren.

<?php

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

2 / Erstellen Sample/Dev/etc/module.xml: Damit Magento 2 über die Setup-Version unseres Moduls informiert wird

<?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 / Erstellen Sample/Dev/etc/frontend/events.xml. In dieser Datei hören wir uns das Ereignis "layout_generate_blocks_after" an.

<?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 / Erstellen Sie Sample/Dev/Model/Layout.phpmit dem Inhalt wie unten

<?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 / Neues Modul einrichten. In Ihrem Home-Website-Verzeichnis. CMD Kommandozeile eingeben:

- PHP Bin / Magento-Modul: Aktivieren Sie Sample_Dev

- php bin / magento setup: upgrade

6 / Aktualisieren Sie die Seite, auf der die XML-Datei angezeigt werden soll (z. B. Ihre Homepage), und checken Sie die XML-Handle-Datei ein var/log/layout_block.xml.

thienphucvx
quelle
Ich bin gerade darauf gestoßen und es ist erstaunlich. Würde es Ihnen etwas ausmachen, einen PR an Magento 2 zu senden, damit jeder diese Funktion nutzen kann? Sogar die Veröffentlichung eines Moduls würde enorm helfen.
mbalparda
Hallo Mbalparda, ich weiß nicht, wie ich es machen soll. Könnten Sie mir helfen, es einzureichen?
thienphucvx
Yep hat dich auf Twitter angerufen.
mbalparda
1
Wo ist die Ausgabe / Pull-Anfrage für die Abstimmung? Verknüpfung ?
Bernhard Zürn