Magento 2でレイアウトファイル処理をデバッグするにはどうすればよいですか?


14

レイアウトファイルの処理に関するmagento 2テーマの仕様によると:

Magentoアプリケーションは、レイアウトファイルを次の順序で処理します。

1 /モジュールからすべてのレイアウトファイルを収集します。順序は、app / etc / config.phpのモジュールリスト内のモジュールの順序によって決まります。

2. /継承されたテーマのシーケンスを決定します[、...、]

3. /最後の祖先から現在までのテーマのシーケンスを繰り返します:

a。すべての拡張テーマレイアウトファイルをリストに追加します。

b。リスト内のオーバーライドされたレイアウトファイルを置き換えます。

4. /リストからすべてのレイアウトファイルをマージします。

このプロセスのすべてのステップのレイアウトファイルをデバッグして表示するにはどうすればよいですか?


ブレークポイントをどこに置くかということですか?それとも何を期待しますか?
ブスカムザ

こんにちは、ありがとう。私の主な目的は、「すべてのレイアウトファイルをマージ」を印刷して、magento 2レイアウトがどのようにレンダリングされるかを確認することです。以下のように答えを追加しました。
thienphucvx

@ thienphucvx、私はあなたのコードを使用しましたが、var / logで.xmlを作成できません。何か変更する必要がありますか?
学習者

デバッグを試みて、「オブザーバーの実行メソッドにvar_dumpで何か」のようにモジュールが正しく作成されていることを確認して、機能しているかどうかを確認できますか?
thienphucvx

1
この開発者向けアプリをご覧ください。
magespecialist

回答:


15

最後に、ロードされたすべてのxmlレイアウトを印刷し、magento 2レイアウトがどのように機能するかを知ることができます。また、カスタムモジュールレイアウトがロードされているかどうかを確認するのにも役立ちます。アイデアは次のとおりです。

  • イベント「layout_generate_blocks_after」をリッスンし、その時点からロードされたすべてのツリーを取得します。

  • ロードされたすべてのツリーをxmlファイルに保存します。

1 /新しいディレクトリを作成しますSample/DevSample/Dev/registration.phpMagento 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 /新しいモジュールをセットアップします。ホームWebサイトのディレクトリ。CMDコマンドラインを入力します。

– php bin / magento module:Sample_Devを有効にします

– php bin / magento setup:upgrade

6 / xmlファイル(たとえば、ホームページ)を表示するページを更新し、でハンドルxmlファイルを確認しますvar/log/layout_block.xml


これに出会ったばかりで、すごいです。誰もがこの機能を利用できるように、Magento 2にPRを送信してもよろしいですか?モジュールをリリースすることでさえ非常に役立ちます。
mbalparda

こんにちはMbalparda、私はそれを行う方法がわかりません。提出してください。
thienphucvx

うん、Twitterであなたにpingを送信しました。
mbalparda

1
投票の問題/プルリクエストはどこにありますか?リンク?
ベルンハルトツルン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.