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.