Magento 2: Modül Dizisi Etki Düzeni XML Yükleme Sırasını İşliyor mu?


11

Do <sequence/>etiketleri module.xmldosyalarında Magento düzen kolu XML dosyalarını işleyecek sırasını etkileyecek? Benim ön araştırma hayır diyor , ama bu yanlış görünüyor bu yüzden onlar onay (kanıt == düzen kodu XML dosya yolları oluşturulan ve yüklenen kaynak kod noktaları) arıyorum

Sıralama etiketleri, XML dosya yükleme sırasını düzen düzenini etkilemezse, bu dosyaların yüklendiği modül sırasını değiştirmenin bir yolu var mı?

Çözmeye çalıştığım belirli bir sorun, kapsayıcı gerçekten sayfaya eklenmeden önce aşağıdakileri yüklediysem

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

Magento barfs.

Yanıtlar:


17

İçindeki dizinin module.xmletkisi vardır app/etc/config.php. Bu dosya, çalıştırdığınızda güncellenir, bin/magento module:enable Vendor_ModuleNameböylece sekans eklediyseniz / değiştirdiyseniz modülünüzü devre dışı bırakmanızı ve ardından yeniden etkinleştirmenizi öneririm. module.xmlDosyanızı güncellemek ve önbelleğinizi temizlemek yeterli değildir, Magento'nun geliştirme sırasında sıra değişikliklerini görmesini sağlamak için tam bir disablegeri enabledönüşüm yapmanız gerekir .

config.phpDosyadaki modüllerin sıralama düzeni, Anton'un açıklamasına göre diğer tüm yapılandırma dosyası yüklemesi için kullanılır .

Bu açıklamadaki kod konumları biraz güncel değil. Bu, sekans sıralaması için koddur https://github.com/magento/magento2/blob/2.0.2/lib/internal/Magento/Framework/Module/ModuleList/Loader.php#L131

Güncelleme 2:

Uygulama / 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>

aynı di.xml dosyasındaki bir sayfa düzeni dosya toplayıcısına gönderme yapan

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

ilgimizi çeken pageLayoutFileSourceBaseSortedhala aynı di.xml'de

<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 aşağıdaki sıralamayı yapar

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

Burada moduleList, Magento\Framework\Module\ModuleListyükleyicinin yukarıda belirtilen şekilde kullanıldığı temel alınır.


2
İyi bilgi için +1, ancak bu açık bir soru bırakıyor gibi görünüyor - düzen dosyaları XML dosyaları yapılandırma dosyaları olarak kabul veya başka bir şey vardır .
Alan Storm

3
Google kuşaklar için yorumlarında - yapılandırma yükleme yapar dizisi ayarlarını itaat değil, sıra açık bir önbelleği ayarlı değil, bir modül üzerindeki seti etkin / devre dışı.
Alan Storm

1
Hayat kurtarıcı! Bunun olduğunu fark etmeden önce biraz zamanımı aldım.
Anton Evers

Peki ya temadaki layout-xml (app / design / AwesomeTheme / default / ..?) Tüm bu layout-xml'ler , satıcı ve uygulama / kod konumlarındaki de modüllerden sonra , yukarıda açıklananla aynı sırada mı birleştiriliyor?
Klaas van der Weij
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.