Magento 2:モジュールシーケンスインパクトレイアウトはXMLの読み込み順序を処理しますか?


11

ファイル内の<sequence/>タグはmodule.xml、MagentoがレイアウトハンドルXMLファイルを処理する順序に影響しますか?私の予備調査はnoと言っていますが、それは間違っているようですので、そうでないことの確認/証明を探しています(証明==レイアウトハンドルXMLファイルパスが生成およびロードされるソースコードポイント)

シーケンスタグがレイアウトハンドルXMLファイルの読み込み順序に影響しない場合、これらのファイルが読み込まれるモジュールの順序を変更する方法はありますか?

私が解決しようとしている特定の問題は、コンテナが実際にページに追加される前に次のものをロードしているかどうかです

    <referenceContainer name="product.info.media">    
        <action method="unsetChild">
            <argument name="block" xsi:type="string">product.info.media.image</argument>
        </action>
    </referenceContainer>

Magento barfs。

回答:


17

のシーケンスmodule.xmlはに影響を与えapp/etc/config.phpます。このファイルは実行時に更新されるbin/magento module:enable Vendor_ModuleNameため、シーケンスを追加または変更した場合は、モジュールを無効にしてから再度有効にすることをお勧めします。module.xmlここでファイルを更新してキャッシュをクリアするだけでは十分ではありません。開発中にMagentoがシーケンスの変更を確認できるようにするには、完全にdisableenableサイクルする必要があります。

config.phpファイル内のモジュールのソート順は、Antonのコメントに従って、他のすべての構成ファイルの読み込みに使用されます。

そのコメントのコードの場所は少し古くなっています。これは、シーケンスをソートするためのコードですhttps://github.com/magento/magento2/blob/2.0.2/lib/internal/Magento/Framework/Module/ModuleList/Loader.php#L131

アップデート2:

app / etc / di.xml

<type name="Magento\Framework\View\Model\Layout\Merge">
    <arguments>
        <argument name="fileSource" xsi:type="object">Magento\Framework\View\Layout\File\Collector\Aggregated\Proxy</argument>
        <argument name="pageLayoutFileSource" xsi:type="object">pageLayoutFileCollectorAggregated</argument>
        <argument name="cache" xsi:type="object">Magento\Framework\App\Cache\Type\Layout</argument>
    </arguments>
</type>

同じdi.xml内のページレイアウトファイルコレクターを参照する

<virtualType name="pageLayoutFileCollectorAggregated" type="Magento\Framework\View\Layout\File\Collector\Aggregated">
    <arguments>
        <argument name="baseFiles" xsi:type="object">pageLayoutFileSourceBaseSorted</argument>
        <argument name="themeFiles" xsi:type="object">pageLayoutFileSourceThemeSorted</argument>
        <argument name="overrideBaseFiles" xsi:type="object">pageLayoutFileSourceOverrideBaseSorted</argument>
        <argument name="overrideThemeFiles" xsi:type="object">pageLayoutFileSourceOverrideThemeSorted</argument>
    </arguments>
</virtualType>

私たちの興味を引くものはpageLayoutFileSourceBaseSorted、同じdi.xmlにあります

<virtualType name="pageLayoutFileSourceBaseSorted" type="Magento\Framework\View\File\Collector\Decorator\ModuleDependency">
    <arguments>
        <argument name="subject" xsi:type="object">pageLayoutFileSourceBaseFiltered</argument>
    </arguments>
</virtualType>

Magento\Framework\View\File\Collector\Decorator\ModuleDependency 次のソートを行います

protected function getModulePriority($moduleName)
{
    if ($this->orderedModules === null) {
        $this->orderedModules = $this->moduleList->getNames();
    }
    $result = array_search($moduleName, $this->orderedModules);
    // Assume unknown modules have the same priority, distinctive from known modules
    if ($result === false) {
        return -1;
    }
    return $result;
}

where moduleListMagento\Framework\Module\ModuleList、上記のローダーを使用する順番に基づいています。


2
+1は良い情報ですが、それは未解決の問題を残しているようです-レイアウトハンドルXMLファイルは構成ファイルと見なされますか、それとも他の何かです
アランストーム

3
Google後世へのコメント-設定の読み込みシーケンスの設定に従いますが、シーケンスはキャッシュのクリアに設定されておらず、モジュールの有効化/無効化に設定されています。
アランストーム

1
ライフセーバー!これが起こっていることに気づく前に、かなり時間がかかりました。
Anton Evers

また、テーマ内のlayout-xml(app / design / AwesomeTheme / default / ..?)についてはどうですか?これらのすべてのlayout-xml は、上記の説明と同じ順序で、ベンダーおよびapp / codeの場所にあるモジュールの後にマージさますか?
Klaas van der Weij
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.