Magento 2: ¿El diseño de impacto de secuencia del módulo maneja el pedido de carga XML?

11

¿Las <sequence/>etiquetas en los module.xmlarchivos afectan el orden en que Magento procesará el diseño para manejar los archivos XML? Mi investigación preliminar dice que no , pero que parece mal, así que estoy buscando la confirmación / prueba de que no lo hacen (a prueba de puntos de código fuente == donde se generan y cargan las rutas de archivos XML disposición de mango)

Si las etiquetas de secuencia no afectan el diseño de la orden de carga del archivo XML, ¿hay alguna forma de cambiar el orden del módulo en el que se cargan estos archivos?

El problema específico que estoy tratando de resolver es si tengo lo siguiente cargado antes de que el contenedor se agregue a la página

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

Magento barfs.

Alan Storm
fuente

Respuestas:

17

La secuencia module.xmltiene un impacto en app/etc/config.php. Este archivo se actualiza cuando lo ejecuta, bin/magento module:enable Vendor_ModuleNamepor lo que si ha agregado / cambiado secuencias, le sugiero que desactive su módulo y luego lo vuelva a habilitar. La actualización de su module.xmlarchivo y borrar la memoria caché no es suficiente aquí, tendrá que hacer una completa disablere- enableciclo para obtener Magento para ver cambios en la secuencia durante el desarrollo.

El orden de clasificación de los módulos en el config.phparchivo se usa para todas las demás cargas de archivos de configuración según el comentario de Anton aquí.

Las ubicaciones de código en ese comentario están un poco desactualizadas. Este es el código para la secuencia de clasificación https://github.com/magento/magento2/blob/2.0.2/lib/internal/Magento/Framework/Module/ModuleList/Loader.php#L131

Actualización 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>

que hace referencia a un recopilador de archivos de diseño de página en el mismo 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>

el que nos parece interesante pageLayoutFileSourceBaseSortedtodavía está en el mismo 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 hace la siguiente clasificación

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

donde moduleListse basa en lo Magento\Framework\Module\ModuleListque a su vez utiliza el cargador mencionado anteriormente.

Kristof en Fooman
fuente
2
+1 para obtener buena información, pero eso parece dejar una pregunta abierta: ¿los archivos XML de manejo de diseño se consideran archivos de configuración o son algo más ?
Alan Storm
3
Al comentar la posteridad de Google - la carga de la configuración hace obedecer los ajustes de la secuencia, pero la secuencia no se encuentra en una caché clara, su conjunto en un módulo de activación / desactivación.
Alan Storm
1
Salvavidas! Me tomó bastante tiempo antes de notar que esto estaba sucediendo.
Anton Evers
¿Y qué pasa con el layout-xml en el tema (app / design / AwesomeTheme / default / ..? ¿Se fusionan todos estos layout-xml después de los módulos en las ubicaciones del proveedor y la aplicación / código, en el mismo orden que se explicó anteriormente?
Klaas van der Weij