Як перезаписати шаблон через модуль в Magento2


9

Я створюю модуль і хочу перезаписати шаблон app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml.

Чи можливо це в модулі (не тема)

На жаль, змінити назву модуля через макет XML не здається надто простим, оскільки це встановлено жорстко зашифровано в https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Block /Adminhtml/Product/Edit/Tab/Options.php#L21


Перейдіть за цим посиланням для відповіді magento.stackexchange.com/questions/76434/…
Divya Muralidharan

Перейдіть за цим посиланням, щоб отримати відповідь magento.stackexchange.com/questions/76434/…
Divya Muralidharan

Відповіді:


10

Додати папку макета файлу модуля [Vendor] / [ModuleName] /view/adminhtml/layout/catalog_product_options.xml

<?xml version="1.0"?>
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
    <referenceBlock name="admin.product.options">
        <arguments>
            <argument name="template" xsd:type="string">[Vendor]/[ModuleName]::product_options.phtml</argument>
        </arguments>
    </referenceBlock>
</layout>

Також потрібно додати в модуль xml цей рядок для завантаження макетів після каталогу

<sequence>
        <module name="Magento_Catalog"/>
</sequence>

Звідки ви взяли ім’я admin.product.options?
Олексій

Просто шукайте \ Magento \ Каталог \ Блок \ Adminhtml \ Продукт \ Редагувати \ Tab \ Опції за файлами компонування та дізнайтеся декларацію в Magento / Catalog / view / adminhtml / layout / catalog_product_options.xml
KAndy

1
Чи не повинно бути Vendor_ModuleName::product_options.phtml?
Giel Berkers

Так, дякую за очко
Кенді

2
Це рішення працює лише в тому випадку, якщо оригінальний шаблон був встановлений у файлі Block.php. Якщо оригінальний шаблон встановлений на layout.xml, це рішення не працюватиме. Кращий підхід - завжди використовувати <action method="setTemplate">замість цього <arguments>. Це рішення працює у всіх випадках.
Ялогут

3
  1. Створіть відповідний файл макета у своєму модулі:

[Постачальник] / [ModuleName] /view/adminhtml/layout/catalog_product_options.xml

  1. Встановіть власну конфігурацію шаблону
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
    <referenceBlock name="admin.product.options">
        <action method="setTemplate">
            <argument name="template" xsi:type="string">[Vendor]_[ModuleName]::product_options.phtml</argument>
        </action>
    </referenceBlock>
</layout>

ПРИМІТКА: <action method="setTemplate">замість цього дуже важливо використовувати <arguments>. <arguments>працюватиме лише в тому випадку, якщо в блоці немає іншого шаблону, вказаного в декларації xml. У будь-якому іншому випадку вам потрібно <action method="setTemplate">змінити існуючий шаблон. Краще використовувати, <action method="setTemplate">тому що це завжди працює.


0

Так, ви можете перезаписати файли шаблонів із програми / коду вашого спеціального модуля. Однак майте на увазі, що в концепції успадкування Magento файли (шаблони, макети, статичні файли) з програми / дизайну перезаписуються однаково у додатку / коді. Так само, як дочірня тема замінює батьківську тему.

Отже, я вважаю, що найкраще створити власну тему для вашого користувальницького модуля та додати туди всі ваші файли phtml, xml, css, js, шрифти та зображення у додаток / дизайн.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.