Magento2のモジュールを介してテンプレートを上書きする方法


9

モジュールを作成していて、テンプレートを上書きしたいapp/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml

これはモジュールで可能ですか(テーマではありません)

残念ながら、これはhttps://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Blockにハードコードされているため、レイアウトXMLを介してモジュール名を変更するのは簡単ではないようです。 /Adminhtml/Product/Edit/Tab/Options.php#L21


回答のために、このリンクを参照してくださいmagento.stackexchange.com/questions/76434/...
Divya Muralidharan

回答のために、このリンクを参照してくださいmagento.stackexchange.com/questions/76434/...
Divya Muralidharan

回答:


10

モジュールファイルのレイアウトフォルダーを追加します[ベンダー] / [モジュール名] /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から名前を得ましたか?
Alex

レイアウトファイルで\ Magento \ Catalog \ Block \ Adminhtml \ Product \ Edit \ Tab \ Optionsを検索し、Magento / Catalog / view / adminhtml / layout / catalog_product_options.xmlで宣言を見つけてください
KAndy

1
そうじゃないのVendor_ModuleName::product_options.phtml
Giel Berkers

はい、ポイントに感謝します
KAndy 2016年

2
このソリューションは、元のテンプレートがBlock.phpファイルで設定されている場合にのみ機能します。元のテンプレートがlayout.xmlに設定されている場合、このソリューションは機能しません。より良いアプローチは、の<action method="setTemplate">代わりに常に使用することです<arguments>。このソリューションはすべてのケースで機能します。
Jalogut 2017

3
  1. モジュールに対応するレイアウトファイルを作成します。

[ベンダー] / [モジュール名] /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

はい、カスタムモジュールのapp / codeからテンプレートファイルを上書きできます。ただし、Magentoの継承の概念では、app / designからのファイル(テンプレート、レイアウト、静的ファイル)がapp / codeで同じものを上書きすることに注意してください。子テーマが親テーマを上書きするように。

したがって、カスタムモジュールのカスタムテーマを作成し、すべてのphtml、xml、css、js、フォント、および画像ファイルをapp / designに追加することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.