Magento 2: Чи послідовність дії модуля обробляє макет завантаження XML?


11

Чи впливають <sequence/>теги у module.xmlфайлах на порядок, яким Magento обробляє макет обробки файлів XML? Моє попереднє дослідження каже " ні" , але це здається неправильним, тому я шукаю підтвердження / доказ того, що вони не відповідають (доказ == точки вихідного коду, де макет обробляє шляхи файлів XML і завантажується)

Якщо теги послідовності не впливають на макет обробляти порядок завантаження файлів XML - чи є спосіб змінити порядок модуля, у який завантажуються ці файли?

Конкретна проблема, яку я намагаюся вирішити, полягає в тому, якщо я завантажував таке, перш ніж контейнер буде фактично доданий на сторінку

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

Мафенто барфи.

Відповіді:


17

Послідовність в module.xmlмає вплив на app/etc/config.php. Цей файл оновлюється при запуску, bin/magento module:enable Vendor_ModuleNameтому якщо ви додали / змінили послідовності, я б запропонував вимкнути модуль, а потім повторно увімкнути його. Оновлення module.xmlфайлу і очищення кешу не вистачає тут, вам потрібно зробити повні disableперевстановлення enableциклу , щоб отримати Magento , щоб побачити зміни послідовності в процесі розробки.

Порядок сортування модулів у config.phpфайлі потім використовується для всіх інших завантажувальних файлів конфігурації відповідно до коментаря Антона тут.

Розташування коду в цьому коментарі трохи застаріло. Це код для сортування послідовностей https://github.com/magento/magento2/blob/2.0.2/lib/internal/Magento/Framework/Module/ModuleList/Loader.php#L131

Оновлення 2:

app / тощо / 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;
}

де moduleListґрунтується на тому, Magento\Framework\Module\ModuleListщо в свою чергу використовує згаданий вище навантажувач.


2
+1 для гарної інформації, але це, мабуть, не залишає відкритого питання - чи файли XML-файлів макета вважаються файлами конфігурації, чи це щось інше .
Алан Шторм

3
Коментуючи для Google потомству - завантаження конфігурації робить коряться настройки послідовності, але ця послідовність не встановлена на кеш ясною, його набір на модулі включення / вимикання.
Алан Шторм

1
Рятувальник життя! Я зайняв мене досить довго, перш ніж помітив, що це відбувається.
Антон Еверс

А як щодо макета-xml у темі (додаток / дизайн / AwesomeTheme / default / ..?) Усі ці макет-xml об'єднуються після де-модулів у місцях розміщення постачальника та програми / коду в тому ж порядку, як пояснено далі?
Klaas van der Weij
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.