调试工具:如何得到页面的布局文件

本篇将创建一个调试工具模块,用来得到 all loaded xml layout,但是博主现在并不十分清楚 magento 2 的layout 是如何工作的,因此本篇仅是一个记录,以备后续的研究用。本篇也可以看做是 Magento 2 中如何使用 event 和 observer 的一个入门教程。

创建模块

# File: ThankIT/DevTool/registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'ThankIT_DevTool',
    __DIR__
);
# File: ThankIT/DevTool/etc/module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="module.xsd">
    <module name="ThankIT_DevTool" setup_version="1.0.0" schema_version="1.0.0" release_version="1.0.1">
    </module>
</config>

有了上面两个文件,现在该模块就可以被 Mgento 系统找到了。

下面这个文件告诉 Magento 我们要监听layout_generate_blocks_after事件,注意是events.xmls不要少。

# File: ThankIT/DevTool/etc/frontend/events.xml
<?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="thankit_layout_generate_blocks_after" instance="ThankIT\DevTool\Observer\Layout" />
    </event>
</config>

创建ThankIT\DevTool\Observer\Layout.php

# File:ThankIT\DevTool\Observer\Layout.php
<?php
namespace ThankIT\DevTool\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/log/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;
    }
}

然后启用该模块:

php bin/magento module:enable ThankIT_DevTool
php bin/magento setup:upgrade

刷新你想查看布局的页面,然后查看var/log/layout_block.xml就可以看到 all loaded xml layout 了。

最好用文本编辑工具美化一下,这样就看得很舒服了。

参考文档

How can I debug layout file processing in Magento 2?

大体上是正确的,但是有一点变化,Magento 2 升级导致 observer 必须放在模块的 observer 文件夹下。请参考如下文档。

Events and observers

关于 events 的其他文档:

CHOOSE YOUR PERFECT EVENT IN MAGENTO 2

Magento 2.1 – List of all dispatched events

下载

下载地址

发表评论

电子邮件地址不会被公开。 必填项已用*标注