Magento 2: O Layout do Impacto da Sequência do Módulo Lida com a Ordem de Carregamento XML?

11

As <sequence/>tags nos module.xmlarquivos afetam a ordem em que o Magento processará o layout e manipular os arquivos XML? Minha pesquisa preliminar diz que não , mas isso parece errado, então estou procurando por confirmação / prova de que não o fazem (prova == pontos de código-fonte nos quais o layout manipula os caminhos de arquivo XML são gerados e carregados)

Se as tags de sequência não impactarem o layout, tratam da ordem de carregamento do arquivo XML - existe uma maneira de alterar a ordem do módulo em que esses arquivos são carregados?

O problema específico que estou tentando resolver é se tenho o seguinte carregado antes que o contêiner seja realmente adicionado à página

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

Magento vomita.

Alan Storm
fonte

Respostas:

17

A sequência module.xmltem um impacto sobre app/etc/config.php. Este arquivo é atualizado quando você executa, por bin/magento module:enable Vendor_ModuleNameisso, se você adicionou / alterou sequências, sugiro desativar o módulo e reativá-lo. Atualizar seu module.xmlarquivo e limpar o cache não é suficiente aqui, você vai precisar fazer uma completa disablere- enableciclo para obter Magento para ver as mudanças de sequência durante o desenvolvimento.

A ordem de classificação dos módulos no config.phparquivo é usada para todos os outros arquivos de configuração carregados conforme o comentário de Anton aqui.

Os locais de código nesse comentário estão um pouco desatualizados. Este é o código para a sequência de classificação https://github.com/magento/magento2/blob/2.0.2/lib/internal/Magento/Framework/Module/ModuleList/Loader.php#L131

Atualização 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 faz referência a um coletor de arquivos de layout de página no mesmo 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>

aquele que nos parece interessante pageLayoutFileSourceBaseSortedainda está no mesmo 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 faz a seguinte classificação

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

onde moduleListé baseado no Magento\Framework\Module\ModuleListqual, por sua vez, usa o carregador mencionado acima.

Kristof na Fooman
fonte
2
+1 para obter boas informações, mas isso parece deixar uma questão em aberto - os arquivos XML de layout manipulam os arquivos de configuração considerados ou são outra coisa .
Alan Storm
3
Comentando para google posteridade - a carga de configuração faz obedecer a seqüência configurações, mas a seqüência não é definido em um cache claro, seu conjunto em um módulo de ativar / desativar.
Alan Storm
1
Poupança de vida! Demorei um pouco antes de perceber que isso estava acontecendo.
Anton Evers
E o layout-xml no tema (app / design / AwesomeTheme / default / ..? Todos esses layout-xml são mesclados após os módulos nos locais do fornecedor e do aplicativo / código, na mesma ordem que foi explicada acima?
Klaas van der Weij 28/11/19