Magento 2: La séquence de modules impactant la disposition gère-t-elle l'ordre de chargement XML?

11

Les <sequence/>balises dans les module.xmlfichiers ont-elles un impact sur l'ordre dans lequel Magento traitera la mise en page des fichiers XML? Ma recherche préliminaire dit non , mais cela semble faux, donc je cherche une confirmation / preuve qu'ils ne le font pas (preuve == points de code source où les chemins de fichier XML de gestion de la mise en page sont générés et chargés)

Si les balises de séquence n'ont pas d'impact sur la mise en page, gérer l'ordre de chargement des fichiers XML - existe-t-il un moyen de modifier l'ordre des modules dans lequel ces fichiers sont chargés?

Le problème spécifique que j'essaie de résoudre est de savoir si j'ai chargé les éléments suivants avant que le conteneur ne soit réellement ajouté à la page

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

Barfs Magento.

Alan Storm
la source

Réponses:

17

La séquence en module.xmla un impact sur app/etc/config.php. Ce fichier est mis à jour lorsque vous exécutez, bin/magento module:enable Vendor_ModuleNamedonc si vous avez ajouté / modifié des séquences, je vous suggère de désactiver votre module, puis de le réactiver. Mise à jour de votre module.xmlfichier et la suppression du cache ne suffit pas ici, vous aurez besoin de faire un plein disablere enableprogramme pour le séchage Magento pour voir les changements de séquence au cours du développement.

L'ordre de tri des modules dans le config.phpfichier est ensuite utilisé pour tout autre chargement de fichier de configuration selon le commentaire d'Anton ici.

Les emplacements de code dans ce commentaire sont un peu obsolètes. Il s'agit du code pour le tri de séquence https://github.com/magento/magento2/blob/2.0.2/lib/internal/Magento/Framework/Module/ModuleList/Loader.php#L131

Mise à jour 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>

qui fait référence à un collecteur de fichiers de mise en page dans le même 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>

celui qui nous intéresse est pageLayoutFileSourceBaseSortedtoujours dans le même 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 fait le tri suivant

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

moduleListest basé sur Magento\Framework\Module\ModuleListqui à son tour utilise le chargeur mentionné ci-dessus.

Kristof chez Fooman
la source
2
+1 pour de bonnes informations, mais cela semble laisser une question ouverte - les fichiers XML de gestion de la mise en page sont-ils considérés comme des fichiers de configuration, ou s'agit-il d' autre chose .
Alan Storm
3
Commentant pour Google postérité - le chargement de la configuration ne applique les paramètres de séquence, mais la séquence n'est pas définie sur un cache clair, son ensemble sur un module d' activation / désactivation.
Tempête Alan
1
Épargnant de vie! J'ai pris un bon moment avant de remarquer que cela se produisait.
Anton Evers
Et qu'en est-il du layout-xml dans le thème (app / design / AwesomeTheme / default / ..? Tous ces layout-xml sont-ils fusionnés après les modules dans les emplacements vendeur et app / code, dans le même ordre que expliqué ci-dessus?
Klaas van der Weij