2

モデルを書き直したい:

Mage_Sales_Model_Quote_Address

しかし、私はすでにそれをオーバーライドしているアドオン「Payone」を使用しています:

        <sales>
            <rewrite>
                <quote_address>Payone_Core_Model_Sales_Quote_Address</quote_address>
            </rewrite>
        </sales>

私は試した:

        <core>
            <rewrite>
                <sales_quote_address>Mycomp_Mymod_Model_Quote_Address</sales_quote_address>
            </rewrite>
        </core>

しかし、これは機能しません。ヒントはありますか?

4

4 に答える 4

5

私の記憶が私を逃がさない限り、あなたはあなたのモジュールを彼らのモジュールに「依存」させて、あなたの書き直しが最後に来て効果を発揮するようにしたいと思うでしょう。app/etc/modules/My_Module.xmlこれを行うには、ノード内のファイルに以下を追加します。

<depends>
     <Their_Module />
</depends>

それを行ったら、クラスに拡張してもらいます。

class My_Module_Model_Quote_Address extends Payone_Core_Model_Sales_Quote_Address

イベントオブザーバーを使用して必要なことを実行できる場合は、代わりにそれを実行してください。ただし、書き直しが必要な場合は、上記の方法で必要な場所に移動できます。

于 2013-01-08T14:44:47.640 に答える
3

最善の方法は、リライトの代わりにオブザーバーを使用することです(私を信じてください、リライトなしで多くの変更を加えることができます。、、、<model>_load_afterは非常<model>_save_beforeに強力です)。<model>_save_after<model>_load_after

ただし、それでも書き換えが必要な場合はdepends、モジュールにノードを追加して(Payoneの後にロードされるようにするため)、Mage_Sales_Model_Quote_Addressの代わりにPayone_Core_Model_Sales_Quote_Addressを書き換えることができます。

この問題を解決するもう1つの方法があります。クラス内のすべての変更をマージし、以前の書き換えを削除することです。しかし、この方法はシステム全体に混乱をもたらし、モジュール性の整合性に影響を与えます。

于 2013-01-08T14:42:46.160 に答える
1

ええと...デビッドアルジャーの答えから欠落しています...上記の答えは、はるかに健全なアーキテクチャアプローチです。拡張を回避できる場合は、イベントオブザーバーでオブジェクトコンポジションを使用してオブジェクトを操作します。

それがあなたのために機能しない理由を説明させてください:

システム構成がすべてのモジュールからロードされると、.xmlファイルが消費される順序に関係なくロードされます。<class>リライトが発行されると、Magento構成は、そのクラスMage_Sales_Model_Quote_Addessを参照する構成xml階層と同じレベルでレコードを作成します。</class>

Magentoはクラスをロードするたびに、その階層レベルで<rewrite>Payone_Sales_Model_Quote_Address</rewrite>ノードをチェックし、存在する場合はそれをロードし、存在しない場合はクラスノードをロードします。

ノードを配置することにより<depends><Thier_Module></depends>、構成がロードされたときにリライトが最後にロードされ、このノードレベルでリライトが置き換えられます。

...理解できないことの問題...

...問題の原因となる根本的な機能は、将来のモジュールの導入によってモジュールが書き換えられる可能性があり、再び頭を悩ませる可能性があることです...同じクラスを書き換える別のモジュールを導入するとどうなりますか?

于 2013-12-24T22:55:52.453 に答える
0

Magentoはデフォルトで同じファイルの複数の上書きをサポートしていないため、これらのファイルを1つのファイルに結合して、そのファイルを使用する必要があります。

Magento拡張機能の開発者であるAitocは、これを処理しているように見えるモジュールを備えたカスタム書き換え拡張機能を出荷し、これを検出すると、複数の上書きを自動的に1つに移動します。私はまだそれをテストしていませんが、多分それはあなたを助けることができます。

于 2013-01-08T14:32:08.883 に答える