Magento 2: Il layout dell'impatto della sequenza del modulo gestisce l'ordine di caricamento XML?


11

I <sequence/>tag nei module.xmlfile influiscono sull'ordine in cui Magento elaborerà il layout gestirà i file XML? La mia ricerca preliminare dice di no , ma questo sembra sbagliato, quindi sto cercando conferme / prove che non lo fanno (proof == punti del codice sorgente in cui i percorsi dei file XML di gestione del layout sono generati e caricati)

Se i tag di sequenza non influiscono sul layout gestiscono l'ordine di caricamento dei file XML: esiste un modo per modificare l'ordine dei moduli in cui vengono caricati questi file?

Il problema specifico che sto cercando di risolvere è se ho caricato quanto segue prima che il contenitore sia effettivamente inserito nella pagina

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

Barfs Magento.

Risposte:


17

La sequenza in module.xmlha un impatto su app/etc/config.php. Questo file viene aggiornato quando lo esegui, bin/magento module:enable Vendor_ModuleNamequindi se hai aggiunto / modificato sequenze ti suggerisco di disabilitare il modulo e quindi riattivarlo. Aggiornare il module.xmlfile e svuotare la cache non è abbastanza qui, dovrai fare un disablericiclo enablecompleto per far vedere a Magento i cambiamenti di sequenza durante lo sviluppo.

L'ordinamento dei moduli nel config.phpfile viene quindi utilizzato per tutti gli altri file di configurazione caricati come da commento di Anton qui.

Le posizioni del codice in quel commento sono un po 'obsolete. Questo è il codice per l'ordinamento in sequenza https://github.com/magento/magento2/blob/2.0.2/lib/internal/Magento/Framework/Module/ModuleList/Loader.php#L131

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

che fa riferimento a un raccoglitore di file di layout di pagina nello stesso 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>

quello che ci sembra interessante è pageLayoutFileSourceBaseSortedancora nello stesso 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 fa il seguente ordinamento

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

dove moduleListsi basa su Magento\Framework\Module\ModuleListquale a sua volta utilizza il Caricatore menzionato sopra.


2
+1 per una buona informazione, ma che sembra lasciare una domanda aperta: il layout gestisce i file XML considerati file di configurazione o sono qualcos'altro .
Alan Storm,

3
Commentando per google posteri - il caricamento della configurazione non segue le impostazioni di sequenza, ma la sequenza non è impostato su una cache chiaro, il suo set su un modulo di abilitazione / disabilitazione.
Alan Storm,

1
Salvavita! Mi ci è voluto un po 'prima di notare che stava succedendo.
Anton Evers,

E che dire del layout-xml nel tema (app / design / AwesomeTheme / default / ..? Tutti questi layout-xml sono uniti dopo i moduli de nel fornitore e nelle posizioni di app / codice, nello stesso ordine spiegato sopra?
Klaas van der Weij,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.