Magentoテンプレートを修正する正しい方法/アプローチは何ですか?


15

正しいアプローチを提案してください。ユーザーがボタンをクリックしたときに「友人にメール」ページをポップアップウィンドウにカスタマイズしたい(この製品をメールで送信)。テンプレートヒントを有効にすると、ボタンが次のようにレンダリングされることがわかりました。

frontend / rwd / default / template / catalog / product / view / sharing.phtml

対応するレイアウトファイルはcatalog.xml(frontend / rwd / default / layoutにあります)

だから私は、次のコードlocal.xmlcatalog.xml存在する同じフォルダにを作成しました(単に「デバッグ」するtest.phtml代わりにsharing.phtml

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>

        <catalog-product-view>
            <reference name="content">
                <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
                    <block type="catalog/product_view" name="product.info.sharing" as="sharing" template="catalog/product/view/test.phtml"/>
                </block>
            </reference>
        </catalog-product-view>

    </default>
</layout>

しかし、何も起こりません。既存のファイルxmlphtmlファイルを変更せずに、テーマのデフォルトのデザインを変更(上書き)する方法を意味しますか?

回答:


10

これは、local.xmlファイル内に配置する必要があるものです。

<?xml version="1.0"?>
<layout version="0.1.0">
    <catalog_product_view>
        <reference name="product.info.sharing">
            <action method="setTemplate">
                <template>catalog/product/view/test.phtml</template>
            </action>
        </reference>
    </catalog_product_view>
</layout>

あなたがした間違い

  • 2つのレイアウト更新ハンドルを使用しました:defaultcatalog-product-view。それは間違いです。必要なレイアウト更新ハンドルは1つだけです。ここで使用すべき正しいものはcatalog_product_view

  • だから、catalog-product-viewMagentoのため不明です。適切な名前はcatalog_product_view

  • 共有ブロックは既にを介して定義されているためcatalog.xml、そのブロックを参照し、アクションを追加してテンプレートを変更する必要がありますsetTemplate。それが上記のスクリプトが行うことです。

あなたがアイデアを得ることを願っています


私はまだその指定したフォルダに(私はtest.phtmlを作成している)既存のものを現れて、あなたのlocal.xmlを使用
DIMAG Kharab

キャッシュをクリアしましたか?すべてが正しく行われていれば、これは機能するはずです。
ラジーエフKトミー

私の場合、キャッシングが無効になっているので、
インデックス

これ<reference name="content"><block type="core/template" name="test.block" template="catalog/product/view/test.phtml" /></reference>をノードの下に直接追加します<catalog_product_view>。ルックtest.phtmlファイルの内容は、製品ビューページの下部で利用可能であるかどうか
のRajeev Kトミー

まだ運仲間ません
DIMAG Kharab

10

一般的な答えをしようとします。

テンプレートを変更する方法

テーマでphtmlは、デフォルトのテーマまたは親テーマのファイルを上書きできます。元のファイルをコピーしapp/design/frontend/[package]/[theme]/template/[path/to/phtml]て、変更を加えます。

たとえば、テーマを購入したばかりであるなど、プロジェクト固有のカスタムテーマがまだない場合は、次の場所で作成してください。

app/design/frontend/[original-package]/[project-name]

から継承します [original-package]/[default]ます。デフォルトからすべてをコピーする必要はなく、変更が必要なファイルだけをコピーする必要があります。

モジュール固有の変更

phtmlファイルをオーバーライドする代わりに、テンプレートパスを変更します。これは通常、次のようなレイアウトXMLで実行できます。

<reference name="the-block-name">
    <action method="setTemplate"><name>path/to/new/template.phtml</name></action>
</reference>

ただし、これはテンプレートを切り替える必要があるモジュールで使用することを意図したものであり、テーマ固有の変更ではありません。新しいテンプレートがその中にあるはずbase/defaultです。

local.xml / theme.xmlの使用方法

local.xmlファイルは、使用している実際のテーマ、すなわちのディレクトリに存在する必要があります

app/design/frontend/[package]/[theme]/layout

local.xmlフォールバック階層の複数のファイルは考慮されません。これらのうち最初に見つかるものが使用されます:

app/design/frontend/[package]/[theme]/layout/local.xml
app/design/frontend/[package]/default/layout/local.xml
app/design/frontend/base/default/layout/local.xml

(デフォルトの階層を想定し、カスタム定義の階層を想定しない)

変更方法

local.xmlに変更を加えるだけで、元のXMLファイルに既にある定義を繰り返す必要はありません。また、デフォルトのテーマからXMLファイルをコピーして、ファイルに直接変更を加えることを避けます。テーマを維持するlayoutディレクトリを整理してください!

典型的な要素がlocal.xmlあり<remove>、完全に既存のブロックを削除し、<action method="unsetChild">そして<action method="append">別の親からのブロックを移動するために、またはその動作を変更するために、既存のブロックに他のメソッドを呼び出します。

Magento 1.9

Magento 1.9以降、ベストプラクティスは実際にはlayout/local.xmlこれらの変更に使用しないことですが、etc/theme.xml

つまり、app / design / frontend / yourpackage / etc / theme.xmlでレイアウトの更新を追加できます。利点は、レイアウト更新のロード順序を制御できることです。Magento 1.9以前は、local.xmlは常に最後にロードされ、その後にレイアウトディレクティブを実行することは不可能でした。

プロジェクト固有のテーマの変更にlocal.xmlを使用しなくなりました。local.xmlは(1.9以降では)後方互換性の理由で使用されているだけだと思う​​。Local.xmlは、Magento 2(https://github.com/magento/magento2/issues/1037)でも削除されています

ソース:https : //erfanimani.com/dont-use-local-xml/

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