カスタムモジュールからコアテンプレートファイルを上書きする方法


10

2つのファイルを上書きしたい。つまり、view.phtmlおよびprint.phtmlの販売注文です。
(パス:app/design/frontend/base/default/template/sales/order/

app/design/frontend/base/default/template/<My Module Name>/sales/order/コアview.phtmlprint.phtmlファイルが上書きされないようにパスを作成するモジュールを作成しています。

このタスクを達成する方法を教えてください。

回答:


13

これは、モジュール内のレイアウトXMLファイルで行うことができます。config.xmlMagentoにモジュールのレイアウトXML(パス:)をロードさせるには、次のようなモジュールのセクションが必要ですapp/design/frontend/base/default/layout/mymodulename.xml

<config>
    [...]
    <frontend>
        [...]
        <layout>
            <updates>
                <mymodulename_layout module="MyModuleName">
                    <file>mymodulename.xml</file>
                </mymodulename_layout>
            </updates>
        </layout>
    </frontend>

このレイアウトXMLファイルでは、特定のブロックを参照し、そのテンプレートを変更できます。

<layout>
    <sales_order_view>
        <reference name="sales.order.view">
            <action method="setTemplate">
                <template>mymodulename/sales/order/view.phtml</template>
            </action>
        </reference>
    </sales_order_view>
    <sales_order_print>
        <reference name="sales.order.print">
            <action method="setTemplate">
                <template>mymodulename/sales/order/print.phtml</template>
            </action>
        </reference>
    </sales_order_print>
</layout>

@ 7ochem、magento2で同じことを達成するにはどうすればよいですか?
プラサードマガンティ

これは広範すぎてここでコメントに入れることができず、OPが求めているものではないため、これを新しい質問として質問する必要があります
7ochem

3

モジュール名「CustomSales」とパッケージ名「Exercise」を想定します。

ステップ1:app / etc / modules / Exercise_CustomSales.xmlにモジュール構成ファイルを作成します

<config>
<modules>
    <Exercise_CustomSales>
        <active>true</active>
        <codePool>local</codePool>
    </Exercise_CustomSales>
</modules>

ステップ2:app / code / local / Exercise / CustomSales / etc / config.xmlの下に構成ファイルを作成する

<config>
<modules>
    <Exercise_CustomSales>
        <version>1.7.0.2</version>
    </Exercise_CustomSales>
</modules>
<global>
    <blocks>
        <customsales>
            <class>Exercise_CustomSales_Block</class>
        </customsales>
        <sales>
            <rewrite>
                <order_view>Exercise_CustomSales_Block_Sales_Order_View</order_view>
            </rewrite>
        </sales>
    </blocks>
</global>

ステップ3:実際のview.phtmlファイルを上書きするphpファイルを作成しますapp / code / local / Exercise / CustomSales / Block / Sales / Order / View.php

クラスExercise_CustomSales_Block_Sales_Order_View extends Mage_Sales_Block_Order_View
{
    保護された関数_construct()
    {
        parent :: _ construct();
        $ this-> setTemplate( 'customsales / sales / order / view.phtml');
    }
}

ステップ4:レイアウトフォルダー内にlocal.xmlファイルを作成する必要があります(可能なパス:app / design / frontend / package / theme / layout)。これはprint.phtml用です。

例(app / design / frontend / rwd / default / layout / local.xml)

<layout>
<sales_order_print>
    <reference name="sales.order.print">
        <action method="setTemplate">
            <template>customsales/sales/order/print.phtml</template>
        </action>
    </reference>
</sales_order_print>

「app / design / frontend / package / theme / template / customsales / sales / order」内にview.phtmlおよびprint.phtmlファイルを移動します。

magentoキャッシュをクリアします。


ブロック全体を書き直す必要はありません。私の答えでは、Mage_Sales_Block_Order_View最初にgetのコンストラクターが呼び出されてテンプレートが設定setTemplateされ、次に、私の例のレイアウトXMLによって呼び出されてgetが呼び出され、カスタムテンプレートが設定されます。競合が発生する可能性があるため、リライトを使用しないソリューションを求めています。
7ochem 2015年

7ochemは正しいです。テンプレートをブロックで設定する必要はありません。7ochemのソリューションは優れており、私にとってはうまくいきました。
Rajan Faldu 2015年

それはあなた次第です。phpメソッドを上書きまたは追加する場合は、ブロックを上書きする必要があります。それ以外の場合は、module.xmlまたはlocal.xmlを介してテンプレートを変更するだけです。私の解決策は、どのmagentoバージョンにも影響を与えないと思います。
Sohel Rana 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.