[TL:DR]
私はとを持っCore_Class_A
ていCore_Class_B extends Core_Class_A
ます。
両方を書き直して、共通の機能を追加する必要があります。
だから私はこれを作りました:
Custom_Class_A extends Core_Class_A
。
問題は、下からどれを使用するかです(それぞれに賛成と反対)。
Custom_Class_B extends Custom_Class_A
Custom_Class_B extends Core_Class_B
[フルバージョン]
レイヤードナビゲーションに新しいフィルターを追加する拡張機能に取り組んでいます:在庫あり/在庫なし(数日で公開されます)。
コード、今のところ大きな問題はない、戦略...私は私の疑問を持っています。
レイヤードナビゲーションセクションで新しいフィルターを追加するために使用できるイベントがないため、2つのブロックを書き換える必要がMage_Catalog_Block_Layer_View
ありましたMage_CatalogSearch_Block_Layer
。(誰かがより良いアイデアを持っている場合は、共有してくださいが、これは質問の範囲ではありません)。
Mage_Catalog_Block_Layer_View
Vinaiが間接的に私を思ったように私はそれをしなかった(Vinaiの拡張子のいずれかについて、このレビューを参照)。
書き換えたいメソッドを追加し、parent::methodName()
誰もが監視できるイベントを呼び出してディスパッチしました。
メソッドの例を次に示し_initBlocks
ます。私の新しいメソッドは次のようになります:
protected function _initBlocks()
{
parent::_initBlocks(); //call the parent method
//dispatch an event that I can observe and add my logic.
Mage::dispatchEvent('catalog_layer_view_init_blocks', array('block' => $this));
}
しかし、問題は生じますMage_CatalogSearch_Block_Layer
。このブロックは最初のものを拡張しMage_Catalog_Block_Layer_View
ます。
たとえば、_initBlocks
上記のようにメソッドを書き直す必要があります。しかし問題はMage_CatalogSearch_Block_Layer
、独自の_initBlocks
方法がないことです。親クラスからのものを使用しMage_Catalog_Block_Layer_View
ます。
ここで何をしますか?
上記と同じシステムを使用する必要がありますか、それとも新しいクラスに[Namespace]_[Module]_Block_Catalogsearch_Layer
、書き換え用に作成した独自のクラスを拡張させてMage_Catalog_Block_Layer_View
、Mage_CatalogSearch_Block_Layer
?