Magento2のモジュール作成でテンプレートファイルをオーバーライドする方法


8

オーバーライドしたい:

/opt/lampp/htdocs/magento_composer/vendor/magento/module-catalog/view/frontend/templates/product/view/addtocart.phtml

私はそれを私のカスタムモジュールにコピーして貼り付けました:

/opt/lampp/htdocs/magento_composer/app/code/Hello/Custom/view/frontend/templates/product/view/addtocart.phtml

これは私のレイアウトファイルです:

<?xml version="1.0"?>
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>

        <referenceBlock name="product.info.addtocart" template="Hello_Custom::product/view/addtocart.phtml" after="alert.urls">

        </referenceBlock>

    </body>
</page>

で:

/opt/lampp/htdocs/magento_composer/app/code/Hello/Custom/view/frontend/layout/catalog_product_view.xml

module.xml:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="Hello_Custom" setup_version="1.0.0" schema_version="1.0.0">
    </module>
</config>
  • モジュールは単純なHello Worldで機能しているため、正しく登録されています...

この問題はテンプレートパスにあります。ヒントファイルはベンダーからのものですが、カスタムモジュールからのみ発生するはずです(テーマからではありません)。


は、catalog_product_view.xmlの命名が不可欠です。または、ファイルに任意の名前を付けることができます。テンプレートの上書きについて実際に助けが必要です
siddhesh

そのファイルの名前は間違いなく不可欠です。レイアウトファイルがロードされる場所を決定します。たとえばdefault.xml、すべてのページに読み込まれますがcatalog_product_view.xmlcatalog/product/viewアクションにのみ読み込まれます。
ジャック、

回答:


17

あなたはxmlファイルで以下のコードで試すことができます、

<?xml version="1.0"?>
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <referenceBlock name="product.info.addtocart">
                <action method="setTemplate">
                    <argument name="template" xsi:type="string">Hello_Custom::product/view/addtocart.phtml</argument>
                </action>
            </referenceBlock>
         </referenceContainer>
    </body>
</page>

はい、間違いなく..
Narendra.vyas

レイアウトxmlファイルが使用されているかどうかを確認する方法 無効なxmlを書き込もうとしても、ページは正しくレンダリングされました。私のxmlレイアウトファイルが実行されていないと結論付けたので、これを解決する方法を教えてください
siddhesh

または、XMLファイルを更新した後に何らかのコマンドを実行する必要がありますか
siddhesh

1
実際、magento 2の開発ドキュメントでは、「<action>命令を使用しています。この方法はお勧めできませんが、...に使用できます」と読むことができます。そのページの「ブロックテンプレートを設定する」で提案されている方法を使用することをお勧めします。したがって、アクションを使用してテンプレートを変更することは良い解決策ではありません。
drew7721

10

Magentoでテンプレートファイルをオーバーライドするには、3つの方法があります。

例:ここでは、単純な製品のaddtocart.phtmlファイルをオーバーライドします。

方法1:

<referenceContainer name="content">
    <referenceBlock name="product.info.addtocart">
        <action method="setTemplate">
            <argument name="template" xsi:type="string">Vendor_Module::product/view/addtocart.phtml</argument>
        </action>
    </referenceBlock>
</referenceContainer>

方法2:

<referenceContainer name="content">
    <referenceBlock name="product.info.addtocart" template="Vendor_Module::product/view/addtocart.phtml"/>
</referenceContainer>

方法3:

<referenceContainer name="product.info.form.content">
    <block class="Magento\Catalog\Block\Product\View" name="product.info.addtocart" as="addtocart" template="Vendor_Module::product/view/addtocart.phtml"/>
</referenceContainer>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.