4

独自の magento モジュールを作成し、コア コントローラーとモデルを正常に拡張しましたが、レイアウト xml ファイルで同じことを行うのに問題があります。チェックアウトの複数発送の発送ページだけを更新したいです。これまでのところ、checkout.xml ファイル全体を上書きすることしかできませんでしたが、xml ファイルに .xml を含めることだけを望んでいます。

これは私のモジュール config.xml にあるもので、tm.xml ファイルは app/design/frontend/default/default/layout/ にあります

<frontend>
        <layout>
            <updates>
                    <checkout>
                         <file>tm.xml</file>
            </checkout>
        </updates>
    </layout>
</frontend>

ありがとう

4

1 に答える 1

3

更新: 以下のテキストは、テンプレートと XML ファイルをapp/designフォルダー外に保存する方法を示しています。この回答が書かれてから何年にもわたって、これは私の Magento コア チームを強く落胆させてきました。彼らは、コードを使用してアプリケーション レベルでこれを強制するところまで行っており、開発された新しい技術をブロックし続けています。強くお勧めしませんが、歴史的な理由から答えをそのままにしておきます。

まず、レイアウト ファイルをモジュールのどこかに配置することを検討してください。この慣行がどれほど広まっているのかはわかりませんが、配布の観点からは理にかなっています。また、誰かがテーマをデフォルトから変更した場合でも、レイアウトのオーバーライドが確実に適用されるようにします。このようなことをするとうまくいくはずです

<file>../../../../../code/local/Packagename/Modulename/layouts/tm.xml</file>

次に、前述のとおり、上記の XML を使用して、magento インストールの checkout.xml を完全に置き換えます。あなたはこれをしたくありません。代わりに、レイアウトの更新 (その XML ファイルの内容) を Magento の利用可能な更新のリストに追加します。代わりにこのようなことをしてください。

<layout>
    <updates>
        <my_package_my_module_name>                     
            <file>../../../../../code/local/Packagename/Modulename/layouts/tm.xml</file>
        </my_package_my_module_name>
    </updates>
</layout>        

ここでの大きな変更点は、<checkout> を <my_package_my_module_name> に変更したことです。Magento は、このセクションで指定されたすべての XML をパッケージ レイアウトと呼ばれるものに読み込みます。したがって、これにより、XML は checkout.xml 内の XML と共存します。

tm.xml で、複数配送の特定のルールを設定します。

<layout version="0.1.0">
    <checkout_multishipping>
        <!-- ... -->
    </checkout_multishipping>

    <checkout_multishipping_login>
        <!-- ... -->
    </checkout_multishipping_login>
</layout>

ここで留意すべき重要な点は、checkout.xml の既存の複数配送用ルールが引き続き存在することです。<reference /> ルールを記述して、これらのルールの動作をオーバーライドする必要があります。これが、Magento のレイアウト システムのしくみです。まだ読んでいない場合は、 Magento Designer's Guide 、特にIntro to Layoutsセクションに目を通すことをお勧めします。

最後に、コントローラーをオーバーライドしていると述べました。マルチシッピング コントローラーを検証する場合は、 <checkout_multishipping> タグを使用する必要があります。コントローラーのそのページのアクション コントローラー/アクション メソッドの組み合わせの名前と一致するタグを使用する必要があります。

<packagename_modulename_actioncontrollername_action />
于 2009-06-29T19:45:08.527 に答える