Làm cách nào để gỡ lỗi xử lý tệp bố cục trong Magento 2?


14

Theo đặc tả chủ đề magento 2 về xử lý tệp Bố cục:

Ứng dụng Magento xử lý các tệp bố cục theo thứ tự sau:

1 / Thu thập tất cả các tập tin bố trí từ các mô-đun. Thứ tự được xác định bởi thứ tự mô-đun trong danh sách mô-đun từ app / etc / config.php.

2. / Xác định chuỗi các chủ đề được kế thừa [, ...,]

3. / Lặp lại chuỗi các chủ đề từ tổ tiên cuối cùng đến hiện tại:

a. Thêm tất cả các tập tin bố trí chủ đề mở rộng vào danh sách.

b. Thay thế các tập tin bố trí ghi đè trong danh sách.

4. / Hợp nhất tất cả các tập tin bố trí từ danh sách.

Làm cách nào tôi có thể gỡ lỗi và xem tệp bố cục cho mỗi bước của quy trình này?


Bạn có nghĩa là nơi để đặt điểm phá vỡ? Hay bạn mong đợi điều gì?
BuskaMuza

Chào cảm ơn. Mục đích chính của tôi là in "hợp nhất tất cả các tệp bố cục" để xem cách bố trí magento 2 hiển thị. Tôi đã thêm câu trả lời của tôi như dưới đây.
thienphucvx

@ thienphucvx, tôi đã sử dụng mã của bạn nhưng tôi không thể tạo .xml tại var / log. Tôi có cần thay đổi gì không?
người học

Bạn có thể thử gỡ lỗi để đảm bảo rằng bạn đã tạo mô-đun đó một cách chính xác như "var_dump Something on excute of observer" để kiểm tra xem nó có hoạt động hay không?
thienphucvx

1
Hãy xem ứng dụng dành cho nhà phát triển này, nó có thể giúp bạn trong quá trình gỡ lỗi: github.com/magespecialist/mage-chrome-toolbar
Phoenix128_RiccardoT

Câu trả lời:


15

Cuối cùng, tôi có thể in tất cả bố cục xml đã tải và biết cách bố trí magento 2 hoạt động. Nó cũng giúp chúng tôi kiểm tra xem bố trí mô-đun tùy chỉnh của chúng tôi đã được tải hay chưa. Ý tưởng là:

  • Chúng tôi lắng nghe một sự kiện Bố cục_generate_blocks_after và nhận tất cả các cây được tải từ thời điểm đó.

  • Lưu tất cả cây được tải vào một tệp xml.

1 / Chúng tôi tạo một thư mục mới Sample/Dev. Tạo Sample/Dev/registration.phpđể khai báo với Magento 2 về thư mục mô-đun của chúng tôi.

<?php

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

2 / Tạo Sample/Dev/etc/module.xml: Để Magento 2 biết về phiên bản thiết lập mô-đun của chúng tôi

<?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 / Tạo Sample/Dev/etc/frontend/events.xml. Trong tập tin này, chúng tôi sẽ lắng nghe sự kiện Bố cục_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 / Tạo Sample/Dev/Model/Layout.phpvới nội dung như dưới đây

<?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 / Thiết lập mô-đun mới. Trong thư mục trang web của bạn. nhập dòng lệnh CMD:

- Mô-đun php bin / magento: bật Sample_Dev

- Thiết lập php bin / magento: nâng cấp

6 / Làm mới trang mà bạn muốn xem tệp xml (ví dụ: trang chủ của bạn) và kiểm tra tệp xml xử lý của bạn trong var/log/layout_block.xml.


Tôi chỉ đi qua điều này và nó là tuyệt vời. Bạn có phiền khi gửi PR cho Magento 2 để mọi người có thể có tính năng này không? Ngay cả việc phát hành một mô-đun sẽ giúp rất nhiều.
mbalparda

Xin chào Mbalparda, tôi không biết làm thế nào. Bạn có thể giúp tôi gửi nó?
thienphucvx

Yep ping bạn trên Twitter.
mbalparda

1
vấn đề / pull-request để nâng cấp ở đâu? liên kết?
Bernhard Zürn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.