Magento 2'de düzen dosyası işlemede nasıl hata ayıklayabilirim?


14

Layout dosyalarının işlenmesi hakkında magento 2 tema spesifikasyonuna göre:

Magento uygulaması mizanpaj dosyalarını aşağıdaki sırada işler:

1 / Modüllerden tüm düzen dosyalarını toplar. Sıra, modül listesindeki modül sırası tarafından app / etc / config.php dosyasından belirlenir.

2. / Miras alınan temaların sırasını belirler [, ...,]

3. / Son atadan akıma temaların sırasını yineler:

a. Genişleyen tüm tema düzeni dosyalarını listeye ekler.

b. Listedeki geçersiz kılınmış mizanpaj dosyalarını değiştirir.

4. / Listedeki tüm düzen dosyalarını birleştirir.

Bu işlemin her adımı için düzen dosyasında nasıl hata ayıklayabilir ve görüntüleyebilirim?


Kesme noktalarını nereye koyacağınızı mı kastediyorsunuz? Ya da ne beklerdiniz?
— BuskaMuza

Selam teşekkür ederim. Benim asıl amacım magento 2 düzen nasıl render görmek için "tüm düzen dosyasını birleştirir" yazdırmaktır. Cevabımı aşağıdaki gibi ekledim.
— thienphucvx

@ thienphucvx, kodunuzu kullandım ancak var / log'da .xml oluşturamıyorum. Herhangi bir şeyi değiştirmem gerekiyor mu?
— öğrenen

Çalışıp çalışmadığını kontrol etmek için bu modülü doğru bir şekilde "var_dump gözlemci yöntemi üzerinde bir şey" gibi oluşturduğunuzdan emin olmak için hata ayıklamaya çalışabilir misiniz?
— thienphucvx

1
Bu geliştirici uygulamasına bir göz atın, hata ayıklama işleminde size yardımcı olabilir: github.com/magespecialist/mage-chrome-toolbar
— Phoenix128_RiccardoT

Yanıtlar:


16

Son olarak, tüm yüklü xml düzenini yazdırabilir ve magento 2 düzeninin nasıl çalıştığını bilirim. Ayrıca, özel modül düzenimizin yüklü olup olmadığını kontrol etmemize yardımcı olur. Fikir:

  • “ Layout_generate_blocks_after ” etkinliğini dinliyoruz ve yüklü tüm ağacı o noktadan alıyoruz .

  • Yüklenen tüm ağacı bir xml dosyasına kaydedin.

1 / Yeni bir dizin oluşturuyoruz Sample/Dev. Sample/Dev/registration.phpMagento 2 ile modül dizinimiz hakkında bilgi vermek için oluşturun .

<?php

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

2 / Oluştur Sample/Dev/etc/module.xml: Magento 2'ye modülümüzün kurulum sürümü hakkında bilgi vermek için

<?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 / Oluştur Sample/Dev/etc/frontend/events.xml. Bu dosyada, "layout_generate_blocks_after" etkinliğini dinleyeceğiz

<?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.phpAşağıdaki gibi içerik ile oluşturun

<?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 / Yeni modül kurun. Ana web sitesi dizininizde. CMD komut satırını girin:

- php bin / magento modülü: Sample_Dev'i etkinleştirin

- php bin / magento kurulumu: yükseltme

6 / xml dosyasını görmek istediğiniz sayfayı yenileyin (örneğin: ana sayfanız) ve xml dosyasını işleyin var/log/layout_block.xml.


Ben sadece bu rastladım ve şaşırtıcı. Herkesin bu özelliğe sahip olması için Magento 2'ye bir PR göndermeyi düşünür müsünüz? Bir modülü serbest bırakmak bile çok yardımcı olacaktır.
— mbalparda

Merhaba Mbalparda, nasıl yapacağımı bilmiyorum. Göndermeme yardım eder misiniz?
— thienphucvx

Evet, Twitter'da size ping attı.
— mbalparda

1
upvoting için sorun / çekme talebi nerede? bağlantı?
— Bernhard Zürn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.