마 젠토 2 : 모듈 시퀀스 영향 레이아웃이 XML로드 순서를 처리합니까?


11

파일 의 <sequence/>태그가 module.xmlMagento가 레이아웃 처리 XML 파일을 처리하는 순서에 영향을 줍니까? 내 예비 연구는 아니오 라고 말하지만 잘못 된 것이므로 확인 / 증거를 찾고 있습니다.

시퀀스 태그가 레이아웃 핸들 XML 파일로드 순서에 영향을 미치지 않는 경우 해당 파일이로드되는 모듈 순서를 변경하는 방법이 있습니까?

내가 해결하려는 특정 문제는 컨테이너가 실제로 페이지에 추가되기 전에 다음을로드 한 경우입니다.

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

마 젠토 바프.

답변:


17

의 순서 module.xml는에 영향을 미칩니다 app/etc/config.php. 이 파일은 실행할 때 업데이트 bin/magento module:enable Vendor_ModuleName되므로 시퀀스를 추가 / 변경 한 경우 모듈을 비활성화 한 다음 다시 활성화하는 것이 좋습니다. module.xml파일을 업데이트 하고 캐시를 지우는 것만으로는 충분하지 않습니다 . 개발 중에 Magento가 시퀀스 변경 사항을 볼 수 있도록 전체 disable다시 enable주기를 수행해야합니다 .

config.php파일 의 모듈 정렬 순서는 Anton의 설명에 따라 다른 모든 구성 파일로드에 사용됩니다 .

해당 주석의 코드 위치가 약간 오래된 것입니다. https://github.com/magento/magento2/blob/2.0.2/lib/internal/Magento/Framework/Module/ModuleList/Loader.php#L131을 정렬하는 코드입니다.

업데이트 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>

동일한 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>

우리에게 관심이있는 것은 pageLayoutFileSourceBaseSorted여전히 같은 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 다음 정렬을 수행

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

여기서, moduleList기초에 Magento\Framework\Module\ModuleList차례로 상기 로더는 상기 한 방법을 사용한다.


2
좋은 정보를 얻으려면 +1이지만 공개 질문은 남습니다. 레이아웃 핸들 XML 파일은 구성 파일로 간주되거나 다른 것 입니다.
Alan Storm

3
Google 후손에 대한 주석-구성 로딩 시퀀스 설정에 따르지만 시퀀스는 캐시 지우기에 설정되지 않으며 모듈 활성화 / 비활성화에 설정됩니다.
Alan Storm

1
생명의 은인! 나는 이것이 일어나고 있음을 알기 전에 꽤 오래 걸렸다.
Anton Evers

테마의 layout-xml은 어떻습니까 (app / design / AwesomeTheme / default / ..?이 layout-xml은 모두 위에서 설명한 순서대로 공급 업체 및 앱 / 코드 위치에서 모듈 뒤에 병합 됩니까?
Klaas van der Weij
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.