変更を行うときは、クラス全体を「ローカル」コードプールにコピーする必要がありますか
質問
誰かが私のためにこれに答えてくれませんか。
ローカルコードプールでMage/Coreファイルの独自のバージョンを作成した場合、Mage/Coreファイルを完全に上書きしますか?または、私のコードで再定義されていない方法は、コアファイルからまだ継承されますか?
例。次のファイル(Exception.Php)には、いくつかのメソッド(関数)が含まれています。
~ app
-> code
-> core
-> Mage
-> Customer
-> Exception.php
ここに自分のバージョンを入れたい:
~ app
-> code
-> local
-> Mage
-> Customer
-> Exception.php
私のバージョンには1つのメソッドのみが含まれています(_beforeSave()
)。コアファイルには多くが含まれています。他のすべての方法は、元のファイルからMageがまだ利用できるでしょうか?
それがはっきりしていることを願っています!ありがとう。
解決
フォルダーにファイルを配置する場合 local
(また community
)からのファイルと同じパスで core
コアファイルは役に立たなくなります。
ファイルを検索するMagentoの注文はです app/code/local
, app/code/community
, app/code/core
, lib
. 。 1つのメソッドのみをオーバーライドする場合は、にファイルをコピーしないでください local
フォルダ。
これが素敵なチュートリアルです それはあなたに何かを適切に上書きする方法を示しています。
他のヒント
基本的に、Magentoにプログラムロジック変更の3つの異なる「有効な」方法があります
- イベントの使用
- クラスまたはコントローラーの書き換えを使用します
- 完全なファイルをにコピーします
local
プールをコードしてから変更します。
1.以上を好むことをお勧めします。 2.(Mariusのように)言及されているように、他の拡張または更新が物事を破るリスクがないことに関して、ローカルにコピーするよりも優れています。
を使用する場合 local
プール、常にクラスの完全なコードを維持する必要があります(更新の場合)。
あなたの場合、あなたが適用したコードを、 - のイベントを使用して追加できるかどうかを確認する必要があります - Mage_Customer
呼び出されるオブジェクト customer_save_before
.