Як я можу налагоджувати обробку файлів макета в Magento 2?


14

Відповідно до специфікації теми magento 2 щодо обробки файлів макета:

Додаток Magento обробляє файли макета у такому порядку:

1 / Збирає всі файли компонування з модулів. Порядок визначається порядком модулів у списку модулів з app / etc / config.php.

2. / Визначає послідовність успадкованих тем [, ...,]

3. / Замінює послідовність тем від останнього предка до поточного:

а. Додає всі розширені файли макета теми до списку.

б. Заміняє перелічені файли макета у списку.

4. / Об'єднує всі файли макета зі списку.

Як я можу налагоджувати та переглядати файл макета для кожного кроку цього процесу?


Ви маєте на увазі, де поставити точки перерви? Або що б ви очікували?
BuskaMuza

Привіт, Дякую Моя головна мета - друк "об'єднує весь файл макета", щоб побачити, як відображається макет 2. Я додав свою відповідь як нижче.
thienphucvx

@ thienphucvx, я використовував ваш код, але я не в змозі створити .xml у var / log. Чи потрібно щось міняти?
учень

Чи можете ви спробувати налагодити, щоб переконатися, що ви створили модуль правильно, як "var_dump щось на виправданий метод спостерігача", щоб перевірити, працює він чи ні?
thienphucvx

1
Перегляньте це додаток для розробників, воно може допомогти вам у процесі налагодження: github.com/magespecialist/mage-chrome-toolbar
Phoenix128_RiccardoT

Відповіді:


16

Нарешті, я можу надрукувати весь завантажений xml макет і знати, як працює макет magento 2. Це також допомагає нам перевірити, завантажений чи не власний макет модуля. Ідея така:

  • Ми слухаємо подію “ layout_generate_blocks_after ” і отримуємо з цього моменту все завантажене дерево.

  • Збережіть все завантажене дерево у XML-файл.

1 / Ми створюємо новий каталог Sample/Dev. Створіть, Sample/Dev/registration.phpщоб оголосити Magento 2 про наш каталог модулів.

<?php

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

2 / Створіть Sample/Dev/etc/module.xml: Щоб повідомити Magento 2 про версію установки нашого модуля

<?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 / Створіть Sample/Dev/etc/frontend/events.xml. У цьому файлі ми прослухаємо подію "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 / Створіть Sample/Dev/Model/Layout.phpіз вмістом, як показано нижче

<?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 / Налаштування нового модуля. У каталозі вашого домашнього веб-сайту. введіть командний рядок CMD:

- модуль php bin / magento: включити Sample_Dev

- налаштування php bin / magento: оновлення

6 / Оновіть сторінку, яку ви хочете побачити у форматі XML (наприклад: домашня сторінка) та перевірте файл керування xml у var/log/layout_block.xml.


Я щойно натрапив на це, і це дивно. Ви б не хотіли подати PR на Magento 2, щоб кожен мав цю функцію? Навіть випуск модуля допоможе надзвичайно.
mbalparda

Привіт Мбалпарда, я не знаю, як це зробити. Чи можете ви допомогти мені подати його?
thienphucvx

Так, пінг вас на Twitter.
mbalparda

1
де питання / тяга-запит на повернення коштів? посилання?
Бернхард Зюрн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.