В Magento 1, как разработчик модуля, можно изменить шаблон блока, используя макет XML-кода примерно так:
<reference name="block_to_change">
<action method="setTemplate">
<param>/path/to/template.phtml</param>
</action>
</reference>
а затем добавить свой шаблон в базовую тему.
app/design/frontend/base/default/template/path/to/template.phtml
Возможно ли, как разработчик модуля, сделать что-то подобное в Magento 2? Или мне нужно использовать макет XML или PHP-код, чтобы удалить интересующий меня блок, и вставить новый блок с другим шаблоном (класс которого расширяет класс исходного блока)
Я знаю, что мог бы создать собственную тему, которая заменяет шаблон, но я заинтересован в создании модуля, который изменяет шаблон по умолчанию, но все же позволяет пользовательской теме заменять этот шаблон.
Узел действия устарел, но вы можете использовать аргументы блока
источник
addtocart.phtml
файл add в соответствии с конфигурацией системы, а также хочу обновить его с помощью пользовательского модуля<action method='setTemplate'>
) работает без проблем.Чтобы понять разницу между
<arguments>
и<action>
вы должны понять, как работают конструкторы объектов Magento 2. Если вы переопределите конструктор в Magento, вы всегда получите$data-parameter
массив, представляющий собой массив. Это данные, представленные в файлах XML и переведенные во внутреннюю$_data-array
часть\Magento\Framework\DataObject
:Однако в случае шаблона, если
setTemplate()
он используется в псевдо-конструкторе (с_construct()
одним подчеркиванием), это означает, что$data
он переопределяется, независимо от того, установлен ли он в XML.В этом случае
<action>
предпочтительнее, так как это выполняется после конструктора и псевдо-конструктора.источник
Следующее работает для меня в Magento EE 2.2.3
Примечание: если вы используете пользовательский модуль для изменения шаблона ядра, и вы сходите с ума, потому что предыдущий фрагмент кода не работает, убедитесь, что ваш модуль загружен после модуля ядра, который вы пытаетесь изменить (module.xml), и вы выполнено
bin/magento setup:upgrade
:)источник
Я не знаю почему, но я считаю этот способ лучшим:
источник
Это будет работать, только если ваш блок не был перезаписан перед использованием
setTemplate
метода. Magento 2.2.x и выше.источник