[TL: DR]
Ich habe Core_Class_A
und Core_Class_B extends Core_Class_A
.
Ich muss beide neu schreiben und eine gemeinsame Funktionalität hinzufügen.
Also habe ich folgendes gemacht :
Custom_Class_A extends Core_Class_A
.
Die Frage ist, welche von unten ich verwenden soll (Daumen hoch und Daumen runter für jeden):
Custom_Class_B extends Custom_Class_A
Custom_Class_B extends Core_Class_B
[Vollversion]
Ich arbeite an einer Erweiterung, die der geschichteten Navigation einen neuen Filter hinzufügt: auf Lager / nicht auf Lager (Sie werden ihn in einigen Tagen öffentlich sehen).
Der Code, bisher kein großes Problem, die Strategie ... Ich habe meine Zweifel.
Da es im Bereich der geschichteten Navigation keine Ereignisse gibt, mit denen ich meinen neuen Filter hinzufügen kann, musste ich 2 Blöcke neu schreiben: Mage_Catalog_Block_Layer_View
und Mage_CatalogSearch_Block_Layer
. (Wenn jemand bessere Ideen hat, teilen Sie diese bitte mit, dies ist jedoch nicht Gegenstand der Frage.)
Für das habe Mage_Catalog_Block_Layer_View
ich es so gemacht, wie Vinai es mir indirekt gedacht hat ( siehe diese Rezension über eine der Erweiterungen von Vinai ).
Ich habe die Methoden hinzugefügt, die ich umschreiben wollte, habe gerade parent::methodName()
ein Ereignis aufgerufen und gesendet, das jeder beobachten kann.
Hier ist ein Beispiel für die Methode _initBlocks
. Meine neue Methode sieht folgendermaßen aus:
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));
}
Aber das Problem kommt für Mage_CatalogSearch_Block_Layer
. Dieser Block erweitert den ersten Mage_Catalog_Block_Layer_View
.
Zum Beispiel muss ich die Methode _initBlocks
wie oben gezeigt neu schreiben . Das Problem ist jedoch, dass Mage_CatalogSearch_Block_Layer
es keine eigene _initBlocks
Methode gibt. Es wird die aus der übergeordneten Klasse verwendet Mage_Catalog_Block_Layer_View
.
Was mache ich hier?
Sollte ich das gleiche System wie oben verwenden oder meine neue Klasse [Namespace]_[Module]_Block_Catalogsearch_Layer
meine eigene Klasse erweitern lassen, die ich zum Umschreiben erstellt habe, Mage_Catalog_Block_Layer_View
und einfach die verschiedenen Methoden von kopieren Mage_CatalogSearch_Block_Layer
?