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>

Magento Barfs.

Алан Сторм
источник

Ответы:

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:

приложение / и т.д. / 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
Спасатель жизни! Я взял меня довольно долго, прежде чем я заметил, что это происходит.
Антон Эверс
А как насчет layout-xml в теме (app / design / AwesomeTheme / default / ..? Все эти layout-xml объединены после модулей de в расположении поставщика и приложения / кода в том же порядке, как описано выше?
Клаас ван дер Вей