ฉันจะดีบักการประมวลผลไฟล์เลย์เอาต์ใน 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 ทำงานอย่างไร นอกจากนี้ยังช่วยให้เราตรวจสอบว่ารูปแบบโมดูลที่กำหนดเองของเราโหลดหรือไม่ ความคิดคือ:

  • เราฟังเหตุการณ์“ 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ได้


ฉันเพิ่งเจอสิ่งนี้และมันก็น่าอัศจรรย์ คุณจะส่งการประชาสัมพันธ์ถึง Magento 2 เพื่อให้ทุกคนมีคุณสมบัตินี้ได้หรือไม่? แม้การเปิดตัวโมดูลจะช่วยได้อย่างมาก
mbalparda

สวัสดี Mbalparda ฉันไม่รู้จะทำยังไง คุณช่วยฉันส่งได้ไหม
thienphucvx

ใช่ pinged คุณบน Twitter
mbalparda

1
ปัญหา / คำขอดึงสำหรับการถอนเงินอยู่ที่ไหน ลิงค์
Bernhard Zürn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.