Magento 2에서 레이아웃 파일 처리를 어떻게 디버깅 할 수 있습니까?


14

레이아웃 파일 처리에 대한 magento 2 테마 사양에 따르면 :

Magento 애플리케이션은 다음 순서로 레이아웃 파일을 처리합니다.

1 / 모듈에서 모든 레이아웃 파일을 수집합니다. 순서는 app / etc / config.php의 모듈 목록에서 모듈 순서에 따라 결정됩니다.

2. / 상속 된 테마의 순서를 결정합니다 [, ...,]

3. / 마지막 조상에서 현재까지의 테마 순서를 반복합니다.

ㅏ. 모든 확장 테마 레이아웃 파일을 목록에 추가합니다.

비. 목록에서 재정의 된 레이아웃 파일을 대체합니다.

4. / 목록에서 모든 레이아웃 파일을 병합합니다.

이 프로세스의 모든 단계에 대한 레이아웃 파일을 어떻게 디버깅하고 볼 수 있습니까?


중단 점을 어디에 두어야합니까? 아니면 무엇을 기대하십니까?
BuskaMuza

감사합니다 나의 주요 목적은 "모든 레이아웃 파일을 병합"하여 magento 2 레이아웃이 어떻게 렌더링되는지 확인하는 것입니다. 아래에 답변을 추가했습니다.
thienphucvx 2019 년

@ thienphucvx, 귀하의 코드를 사용했지만 var / log에서 .xml을 만들 수 없습니다. 변경해야합니까?
학습자

"관찰자의 예외적 인 방법에 대한 var_dump 무언가"와 같이 해당 모듈이 올바르게 작동하는지 확인하기 위해 디버깅을 시도 할 수 있습니까?
thienphucvx 23.40에

1
이 개발자 앱을 살펴보면 디버그 프로세스에서 도움이 될 수 있습니다. github.com/magespecialist/mage-chrome-toolbar
Phoenix128_RiccardoT

답변:


16

마지막으로로드 된 모든 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 / Create 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 파일을 보려는 페이지 (예 : 홈 페이지)를 새로 고치고 handle xml 파일을에서 확인하십시오 var/log/layout_block.xml.


나는 방금 이것을 만났고 놀랍습니다. 모든 사람이이 기능을 사용할 수 있도록 Magento 2에 PR을 제출 하시겠습니까? 모듈을 해제하더라도 엄청난 도움이 될 것입니다.
mbalparda

음 발파 르다, 어떻게해야할지 모르겠습니다. 제출하도록 도와 주실 수 있습니까?
thienphucvx

그렇습니다 트위터에 당신을 핑.
mbalparda

1
투표에 대한 문제 / 풀 요청은 어디에 있습니까? 링크?
Bernhard Zürn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.