Jak przesłonić szablon mający układ ALIAS.
Ta odpowiedź jest możliwym przykładem, możesz wykonać to, aby zastąpić szablon ALIAS.
Utworzyłem dwa przykładowe moduły, Vendor_Module
ma układ z szablonem aliasu, zastępujemy ten alias według Vendortwo_Moduletwo
modułu.
Załóżmy, że znasz kroki tworzenia modułu, nie publikuję tworzenia całego modułu.
Moduł 1
\ app \ code \ Vendor \ Module \ etc \ frontend \ route.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
<router id="standard">
<route id="module" frontName="module">
<module name="Vendor_Module" />
</route>
</router>
</config>
\ app \ code \ Vendor \ Module \ view \ frontend \ layout \ module_test_test.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="2columns-left" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block class="Vendor\Module\Block\Test\Test" name="test_test" template="test/test.phtml">
<block class="Vendor\Module\Block\Test\Test" as="testali" template="test/testali.phtml"/>
</block>
</referenceContainer>
</body>
</page>
Moduł 2
\ app \ code \ Vendortwo \ Moduletwo \ etc \ frontend \ trasy.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
<router id="standard">
<route id="moduletwo" frontName="moduletwo">
<module name="Vendortwo_Moduletwo" />
</route>
</router>
</config>
\ app \ code \ Vendortwo \ Moduletwo \ view \ frontend \ layout \ default.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<referenceBlock name="test_test">
<block class="Vendortwo\Moduletwo\Block\Two\Two" as="testali" template="two/twoalias.phtml"/>
</referenceBlock>
</page>
Po usunięciu pamięci podręcznej uruchamiam http: // localhost / magento210 / module / test / test
Szablon aliasu jest zastępowany przez Vendortwo_Moduletwo
two/twoalias.phtml
Oto jak to zrobić poprawnie i bez włamań.
Nie szukałem przypadku użycia OP, ale musiałem móc modyfikować rendery w koszyku. Problem polega na tym, że podobnie jak w przypadku OP
Magento_Checkout
moduł nie udostępnia nazw rendererom, co oznacza, że nie można do nich odwoływać, a ich szablony zmieniać przy użyciu tradycyjnych lub udokumentowanych metod. Jednak po pewnym przemyśleniu odkryłem, jak to zrobić za pomocą narzędzi, które Magento2 zapewnia nam bezpośrednio w układzie XML.Zauważ, że istnieją inne miejsca, w których działa to samo podejście, na przykład w
Magento\Sales\Block\Items\AbstractItems
bloku.Magento_Checkout
IMagento_Sales
moduły są dwie, które wykorzystać maksimum renderujących element, więc ta obejmuje wiele zapytań, które mogłyby prowadzić kogoś do zmieniających się szablonowi bloku bez nazwy. Powodem tego jest fakt, że inni szukają sposobu modyfikowania szablonów renderera w modułach kas lub sprzedaży.Najpierw przedstawię rozwiązanie, a następnie szczegółowo je wyjaśnię każdemu, kto chce wiedzieć, dlaczego to działa.
Rozwiązanie
Dodaj następujące elementy do
checkout_cart_index.xml
pliku układu:Zauważ, że nazwa modułu i ścieżka muszą zostać zmodyfikowane, aby odzwierciedlić bazę kodu.
Wyjaśnienie
Działa to poprzez wykorzystanie
overridden_templates
danych bloku, które nie są domyślnie zdefiniowane.W
Magento_Checkout
Thecheckout_cart_index.xml
file układ określa następujący blok:Następnie definiuje kilka rendererów w
checkout_cart_item_renderers.xml
pliku układu:Niestety, nie można odwoływać się przez ich aliasów,
default
isimple
, odpowiednio.Jednak patrząc na
Magento\Checkout\Block\Cart\Grid
bloku, który jest nazwanycheckout.cart.form
i jest rodzicem renderujących, to można zauważyć, że nie jest to wywołaniegetItemHtml
metody w dołączonym szabloniecart/form.phtml
. Ta metoda następnie wywołujegetItemRenderer
. Obie te metody są zdefiniowane wGrid
„s klasy dominującejAbstractBlock
. Oto gdzieoverridden_templates
wykorzystywane są dane:Dzięki tej wiedzy zapełnianie bloku danymi z układu XML jest proste przy użyciu
arguments
składni Magento2 .źródło
Moje rozwiązanie nie jest uniwersalne, to „brudny hack”, ale w niektórych przypadkach może być przydatne. Moja próbka jest przeznaczona do renderowania interfejsu użytkownika, a nie do adminhtml (przypuszczam, że powinno być tak samo).
Ustaw punkt przerwania w
\Magento\Framework\Data\Structure::getChildId
warunku „ $ parentId == 'checkout.cart.item.renderers' ” (jest to nazwa bloku nadrzędnego, jak widać wcheckout_cart_item_renderers.xml
układzie). Wszystkie bloki potomne mają własne (obliczone) nazwy:Użyj tych nazw w aktualizacji układu modułu:
źródło
Proszę zobaczyć moją odpowiedź tutaj: https://magento.stackexchange.com/a/239387/14403
Wierzę, że to rozwiązanie będzie dla ciebie najlepsze. Rozwiązanie obejmuje zastąpienie dowolnego bloku / szablonu, który nie ma aliasu tylko z nazwą.
źródło