Как переписать шаблон через модуль в 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

Alex
источник
Пожалуйста, используйте эту ссылку для ответа magento.stackexchange.com/questions/76434/…
Дивья Муралидхарана
Пожалуйста, обратитесь по этой ссылке для ответа magento.stackexchange.com/questions/76434/…
Дивья Муралидхарана

Ответы:

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 \ Catalogue \ Block \ Adminhtml \ Product \ Edit \ Tab \ Options по файлам макета и найдите объявление в Magento / Каталог / view / adminhtml / layout / catalog_product_options.xml
KAndy
1
Не должно ли это быть Vendor_ModuleName::product_options.phtml?
Гиль Беркерс,
Да, спасибо за очко
Кэнди
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">потому что это всегда работает.

Jalogut
источник
0

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

Итак, я считаю, что лучше всего создать собственную тему для вашего пользовательского модуля и добавить все ваши файлы phtml, xml, css, js, font и image туда в app / design.

Ивета Аллогенес
источник