根据有关布局文件处理的magento 2主题规范:
Magento应用程序按以下顺序处理布局文件:
1 /从模块收集所有布局文件。该顺序由来自app / etc / config.php的模块列表中的模块顺序确定。
2. /确定继承主题[,...,]的顺序
3. /从上一个祖先到当前迭代一个主题序列:
一种。将所有扩展主题布局文件添加到列表中。
b。替换列表中被覆盖的布局文件。
4. /合并列表中的所有布局文件。
如何为该过程的每个步骤调试和查看布局文件?
根据有关布局文件处理的magento 2主题规范:
Magento应用程序按以下顺序处理布局文件:
1 /从模块收集所有布局文件。该顺序由来自app / etc / config.php的模块列表中的模块顺序确定。
2. /确定继承主题[,...,]的顺序
3. /从上一个祖先到当前迭代一个主题序列:
一种。将所有扩展主题布局文件添加到列表中。
b。替换列表中被覆盖的布局文件。
4. /合并列表中的所有布局文件。
如何为该过程的每个步骤调试和查看布局文件?
Answers:
最后,我可以打印所有已加载的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
。