Czy istnieje plik XML układu motywu lokalnego inny niż local.xml?

14

Stworzyłem motyw, tworząc i edytując następujący plik:

frontend/mypackage/default/layout/local.xml

Mam widok sklepu „site1” i chcę zrobić wyjątki w domyślnym pliku local.xml „mypackage”, więc utworzyłem ten plik:

frontend/mypackage/site1/layout/local.xml

Jednak jak tylko utworzę ten plik, Magento pomija domyślne zmiany local.xml.

Jak mam powiedzieć Magento, aby domyślnie używał pliku local.xml, i do tego dodać zmiany w pliku local.xml serwisu site1?

Gerard Nijboer
źródło
Nie ma mowy. Przepraszam. Przy okazji, dobre pytanie.
user487772,
Stoję w obliczu tego samego scenariusza. Miałem rozszerzyć plik local.xml z domyślnego motywu, a nie całkowicie go zastąpić. Szkoda, że ​​całkowicie zastępuje go wybranym podtematem.
Axel
Czy nie ma nic takiego jak default.xml? A może moglibyśmy zhakować główny kod Magento, który przegląda pliki xml, aby również sprawdzić plik default.xml?
Gerard Nijboer,

Odpowiedzi:

7

Od Magento 1.9 możesz dodawać niestandardowe aktualizacje układu w etc/theme.xmlnastępujący sposób:

<theme>
    <layout>
        <updates>
            <my_theme>
                <file>my_theme.xml</file>
            </my_theme>
        </updates>
    </layout>
</theme>

Jeśli zdefiniujesz takie układy motywu zamiast tego, możesz local.xmlłatwo dodać kolejną aktualizację do motywu potomnego.

Niestety ten sam problem dotyczy pliku theme.xml, który jest używany tylko z motywu rzeczywistego, a nie z motywów nadrzędnych. Ale duplikacja jest znacznie mniejsza.

Przykład theme.xmlmotywu podrzędnego:

<theme>
    <layout>
        <updates>
            <my_theme>
                <file>my_theme.xml</file>
            </my_theme>
            <my_child_theme>
                <file>my_child_theme.xml</file>
            </my_child_theme>
        </updates>
    </layout>
</theme>

Źródło i więcej informacji: http://alanstorm.com/magento_infinite_fallback_theme_xml

Fabian Schmengler
źródło
5

Magento nie scala zmian local.xml z innych plików local.xml. Działanie rezerwowej kompozycji Magento polega na tym, że każdy plik znaleziony w bieżącym motywie / pakiecie będzie preferowany i używany w stosunku do każdego innego pliku motywu / pakietu o podobnej nazwie.

W ten sposób nie można utworzyć scalonego zastąpienia. Będzie to możliwe w Magento 2, ale nie jest możliwe w Magento 1.x.

Niestety będziesz musiał skopiować go z domyślnego motywu lokalnego i dokonać tam modyfikacji.

Powodzenia.

philwinkle
źródło
2
+1. Z pewnością można to osiągnąć programowo, ale na pewno nie będzie warte wysiłku.
user487772,
3

Phil ma absolutną rację, ale teoretycznie istnieje obejście (choć nie takie ładne).

Możesz utworzyć niestandardowy moduł, który wprowadzi aktualizację układu. Następnie w module możesz sprawdzić, czy widok sklepu nie jest tym, który jest wymagany i usunąć tę aktualizację układu.

Złą rzeczą w tym podejściu jest to, że na stałe zakodujesz widok sklepu. I ogólnie to nie wygląda ładnie.

użytkownik487772
źródło