Magento 2: Czy układ sekwencji wpływa na porządek ładowania XML?


11

Czy <sequence/>tagi w module.xmlplikach wpływają na kolejność, w której Magento przetworzy układ obsługi plików XML? Moje wstępne badania wskazują, że nie , ale wydaje się to niewłaściwe, więc szukam potwierdzenia / dowodu, że nie (dowód == punktów kodu źródłowego, w których układ obsługuje ścieżki pliku XML są generowane i ładowane)

Jeśli znaczniki sekwencji nie wpływają na układ, kolejność ładowania plików XML - czy istnieje sposób na zmianę kolejności modułów, w których te pliki są ładowane?

Konkretny problem, który próbuję rozwiązać, polega na tym, że mam załadowane następujące elementy przed faktycznym dodaniem kontenera do strony

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

Magento Barfs.

Odpowiedzi:


17

Sekwencja w module.xmlma wpływ na app/etc/config.php. Ten plik jest aktualizowany po uruchomieniu, bin/magento module:enable Vendor_ModuleNamewięc jeśli dodałeś / zmieniłeś sekwencje, sugeruję wyłączenie modułu, a następnie jego ponowne włączenie. Aktualizowanie module.xmlpliku i wyczyszczenie pamięci podręcznej nie wystarczy tutaj, trzeba zrobić pełną disableponownego enablecyklu dostać Magento, aby zobaczyć zmiany sekwencji w trakcie rozwoju.

Kolejność sortowania modułów w config.phppliku jest następnie wykorzystywana do ładowania wszystkich innych plików konfiguracyjnych zgodnie z komentarzem Antona tutaj.

Lokalizacje kodu w tym komentarzu są nieco nieaktualne. To jest kod do sortowania sekwencji https://github.com/magento/magento2/blob/2.0.2/lib/internal/Magento/Framework/Module/ModuleList/Loader.php#L131

Aktualizacja 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>

który odwołuje się do modułu gromadzącego pliki układu strony w tym samym pliku 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>

ten, który nas interesuje, pageLayoutFileSourceBaseSortedwciąż znajduje się w tym samym pliku 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 wykonuje następujące sortowanie

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;
}

gdzie moduleListjest oparty na tym, Magento\Framework\Module\ModuleListktóry z kolei używa modułu ładującego wspomnianego powyżej.


2
+1 za dobre informacje, ale wydaje się, że pozostawia otwarte pytanie - czy pliki XML obsługujące układ są uważane za pliki konfiguracyjne, czy są czymś innym .
Alan Storm,

3
Komentowanie potomności google - ładowanie konfiguracji jest zgodne z ustawieniami sekwencji, ale sekwencja nie jest ustawiona na wyczyszczenie pamięci podręcznej, jej ustawienie w module włącza / wyłącza moduł.
Alan Storm,

1
Oszczędzanie życia! Zajęło mi sporo czasu, zanim zauważyłem, że tak się dzieje.
Anton Evers

A co z layout-xml w kompozycji (app / design / AwesomeTheme / default / ..? Czy wszystkie te layout-xml są scalone po modułach w lokalizacjach dostawcy i aplikacji / kodu, w takiej samej kolejności, jak wyjaśniono powyżej?
Klaas van der Weij
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.