Как переопределить шаблон, имеющий разметку ALIAS.
Этот ответ является возможным примером, вы можете следовать этому, чтобы переопределить шаблон ALIAS.
Я создал два примера модулей, Vendor_Module
имеет макет с шаблоном псевдонимов. Мы переопределяем этот псевдоним Vendortwo_Moduletwo
модулем.
Предположим, вы знаете шаги по созданию модуля, я не публикую весь процесс создания модуля.
Модуль 1
\ Приложение \ код \ Vendor \ модуль \ и т.д. \ внешний интерфейс \ routes.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>
\ Приложение \ код \ Поставщик \ Module \ вид \ внешний интерфейс \ расположение \ 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>
Модуль 2
\ Приложение \ код \ Vendortwo \ Moduletwo \ и т.д. \ фронтенд \ routes.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>
\ Приложение \ код \ Vendortwo \ Moduletwo \ вид \ фронтенд \ расположение \ 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>
После удаления кэша я запускаю http: // localhost / magento210 / module / test / test
Шаблон псевдонима переопределяется Vendortwo_Moduletwo
two/twoalias.phtml
Это как сделать это правильно и без взломов.
Я не искал сценарий использования OP, но мне нужно было иметь возможность изменять средства визуализации в корзине. Проблема заключается в том, что, как и в случае с OP,
Magento_Checkout
модуль не предоставляет имена для средств визуализации, что означает, что на них нельзя ссылаться и их шаблоны изменяются с использованием традиционных или документированных методов. Тем не менее, после некоторой проверки я обнаружил, как это сделать, используя инструменты, которые Magento2 предоставляет нам непосредственно в XML макета.Обратите внимание, что есть другие места, где работает тот же подход, например, в
Magento\Sales\Block\Items\AbstractItems
блоке.Magento_Checkout
ИMagento_Sales
модули являются двумя , которые делают максимально использовать визуализации элементов, так это охватывает многие из запросов , которые привели бы к кому - то изменению шаблона блока без имени. Причина, по которой это было опубликовано, состоит в том, что другие неизбежно ищут способы изменения шаблонов рендерера в модулях оформления заказа или продажи.Сначала я собираюсь предоставить решение, а затем подробно объяснить его всем, кто хочет знать, почему оно работает.
Решение
Добавьте следующее в
checkout_cart_index.xml
файл макета:Обратите внимание, что имя и путь модуля необходимо изменить, чтобы они отражали вашу кодовую базу.
объяснение
Это работает, используя
overridden_templates
данные блока, которые не определены по умолчанию.В
Magento_Checkout
, тоcheckout_cart_index.xml
файл макета определяет следующий блок:Затем он определяет пару таких средств визуализации в
checkout_cart_item_renderers.xml
файле макета:К сожалению, на них нельзя ссылаться по их псевдонимам
default
иsimple
, соответственно.Однако, глядя на
Magento\Checkout\Block\Cart\Grid
Блок, который названcheckout.cart.form
и является родителем средств визуализации, можно заметить, чтоgetItemHtml
в соответствующем шаблоне есть вызов методаcart/form.phtml
. Затем этот метод вызываетgetItemRenderer
. Оба эти метода определены вGrid
родительском классеAbstractBlock
. Это гдеoverridden_templates
данные используются:Обладая этими знаниями, заполнение блока данными из макета XML является простым, используя
arguments
синтаксис Magento2 .источник
Мое решение не универсально, это «грязный взлом», но в некоторых случаях он может быть полезен. Мой пример для рендера интерфейса, а не для adminhtml (я полагаю, он должен быть таким же).
Установите точку останова
\Magento\Framework\Data\Structure::getChildId
с условием " $ parentId == 'checkout.cart.item.renderers' " (это имя для родительского блока, как вы можете видеть вcheckout_cart_item_renderers.xml
макете). Все дочерние блоки имеют собственные (вычисляемые) имена:Используйте эти имена в обновлении макета вашего модуля:
источник
Пожалуйста, смотрите мой ответ здесь: https://magento.stackexchange.com/a/239387/14403
Я считаю, что это решение, которое будет работать лучше для вас. Решение включает в себя переопределение любого блока / шаблона, который не имеет псевдонима только для имени.
источник