Jaki jest prawidłowy sposób / podejście do modyfikacji szablonu Magento?

15

Proszę zasugerować właściwe podejście, chcę dostosować stronę „EMAIL do znajomego” w wyskakującym oknie, gdy użytkownik kliknie przycisk (wyślij ten produkt e-mailem). Dzięki włączeniu podpowiedzi do szablonów odkryłem, że przycisk jest renderowany

frontend / rwd / default / template / catalog / product / view / sharing.phtml

Odpowiedni plik układu to catalog.xml(w frontend / rwd / default / layout)

Więc utworzyłem local.xmlw tym samym folderze, w którym catalog.xmlistnieje, z następującym kodem (tylko, że podałem test.phtmlzamiast sharing.phtml, tylko do „Debugowania”)

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>

        <catalog-product-view>
            <reference name="content">
                <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
                    <block type="catalog/product_view" name="product.info.sharing" as="sharing" template="catalog/product/view/test.phtml"/>
                </block>
            </reference>
        </catalog-product-view>

    </default>
</layout>

Ale nic się nie dzieje, mam na myśli to, jak mogę zmienić (nadpisać) domyślny projekt motywu bez modyfikowania istniejących xmli phtmlplików?

Dimag Kharab
źródło

Odpowiedzi:

10

Właśnie to powinieneś umieścić w swoim local.xmlpliku.

<?xml version="1.0"?>
<layout version="0.1.0">
    <catalog_product_view>
        <reference name="product.info.sharing">
            <action method="setTemplate">
                <template>catalog/product/view/test.phtml</template>
            </action>
        </reference>
    </catalog_product_view>
</layout>

Błędy, które popełniłeś

  • Użyłeś dwóch uchwytów aktualizacji układu : defaulti catalog-product-view. To jest złe. Potrzebujesz tylko jednego uchwytu aktualizacji układu. Właściwym, którego powinieneś tutaj użyć, jestcatalog_product_view

  • catalog-product-viewMagento nie jest więc znane. Właściwa nazwa tocatalog_product_view

  • Ponieważ blok udostępniania jest już zdefiniowany przez catalog.xml , teraz musisz odnieść się do tego bloku, a następnie zmienić szablon, dodając akcję setTemplate. Tak właśnie działa powyższy skrypt.

Mam nadzieję, że masz pomysł

Rajeev K Tomy
źródło
Użyłem twojego local.xml, wciąż pokazuje on istniejący (utworzyłem test.phtml) w określonym folderze
Dimag Kharab
wyczyściłeś pamięć podręczną? to ma zadziałać, jeśli wszystko zrobiłeś poprawnie.
Rajeev K Tomy
tak, buforowanie jest wyłączone w moim przypadku i ponownie zindeksowałem (myślę, że to nie było potrzebne)
Dimag Kharab
dodaj to <reference name="content"><block type="core/template" name="test.block" template="catalog/product/view/test.phtml" /></reference>bezpośrednio pod węzłem <catalog_product_view>. i sprawdź, czy zawartość pliku test.phtml jest dostępna w dolnej części strony widoku produktu
Rajeev K Tomy
Nie
mam
10

Spróbuję udzielić ogólnej odpowiedzi.

Jak zmienić szablony

W swoim motywie możesz zastąpić dowolne phtmlpliki z motywu domyślnego lub motywu nadrzędnego. Skopiuj oryginalny plik app/design/frontend/[package]/[theme]/template/[path/to/phtml]i wprowadź zmiany.

Jeśli nie masz jeszcze niestandardowego motywu specyficznego dla projektu, na przykład dlatego, że właśnie kupiłeś motyw, pamiętaj, aby go utworzyć

app/design/frontend/[original-package]/[project-name]

Dziedziczy po [original-package]/[default] , nie musisz kopiować wszystkiego z domyślnych, tylko pliki, w których musisz wprowadzić zmiany.

Zmiany specyficzne dla modułu

Alternatywą dla zastąpienia phtmlpliku jest zmiana ścieżki szablonu. Zwykle można to zrobić w układzie XML w następujący sposób:

<reference name="the-block-name">
    <action method="setTemplate"><name>path/to/new/template.phtml</name></action>
</reference>

Ale jest to przeznaczone do użytku przez moduły, które muszą zmienić szablon, a nie do zmian specyficznych dla motywu. Powinien być base/defaultwtedy nowy szablon .

Jak korzystać z local.xml / theme.xml

The local.xmlPlik musi znajdować się w katalogu rzeczywistego motywu, którego używasz, czyli

app/design/frontend/[package]/[theme]/layout

Wielokrotność local.xml plików w hierarchii rezerwowej nie jest branych pod uwagę. Pierwszy z nich, który można znaleźć, jest używany:

app/design/frontend/[package]/[theme]/layout/local.xml
app/design/frontend/[package]/default/layout/local.xml
app/design/frontend/base/default/layout/local.xml

(przy założeniu domyślnej hierarchii i braku niestandardowej hierarchii)

Jak wprowadzać zmiany

Powinieneś mieć tylko modyfikacje w pliku local.xml, a nie powtarzać definicji, które są już w oryginalnych plikach XML. Oznacza to również, że należy unikać kopiowania plików XML z domyślnego motywu, aby wprowadzać zmiany bezpośrednio w plikach. Zachowaj swój motywlayout katalog czystości!

Typowe elementy local.xmlto <remove>całkowite usunięcie istniejących bloków <action method="unsetChild">i <action method="append">przeniesienie bloku z jednego rodzica do drugiego lub wywołanie innych metod na istniejących blokach, aby zmodyfikować ich zachowanie.

Magento 1.9

Począwszy od Magento 1.9, najlepszą praktyką jest nie używanie layout/local.xmltych zmian, aleetc/theme.xml

Krótko mówiąc, możesz dodać aktualizację układu w app / design / frontend / yourpackage / etc / theme.xml. Zaletą jest to, że masz kontrolę nad kolejnością ładowania aktualizacji układu. Przed Magento 1.9 plik local.xml był zawsze ładowany jako ostatni i po nim nie można było wykonać dyrektyw układu.

Nie używam już local.xml do modyfikacji kompozycji specyficznych dla projektu. Myślę, że plik local.xml jest używany tylko ze względu na kompatybilność wsteczną (w wersji 1.9 i nowszych), ponieważ nie ma sensu z niego korzystać. Plik Local.xml został także wyeliminowany w Magento 2 ( https://github.com/magento/magento2/issues/1037 ).

Źródło: https://erfanimani.com/dont-use-local-xml/

Fabian Schmengler
źródło