ich würde gerne die Core Komponente sBasket anpassen und erweitern. Dazu möchte ich wie hier beschrieben - Example plugin: storefront extension - die Komponente durch meine Eigene ersetzen.
Allerdings hatte ich damit bisher keinen Erfolg, die Callback function zum Initialisieren meiner Komponente wird nicht ausgeführt. Weiß jemand welchen Eventnamen ich dafür verwenden muss? Versucht habe ich mehrere u.A. Enlight_Bootstrap_InitResource_sBasket:
Nachtrag:
Was mir auch helfen würde, wäre die Möglichkeit die Parameter für die Erstellung (constructor parameter) des originalen sBasket bestimmen zu können. Die extra Methoden kann ich ggf. in einem eigenen Service implementieren.
Ich habe Core Module mit Core Services verwechselt.
Core Services können nur erweitert (z.B. decorator pattern) oder ersetzt werden.
Core Module bieten wie hier beschrieben (Understanding the Shopware hook system) für jede public Method hooks an, da diese via Proxy erstellt (also das Objekt) und aufgerufen werden.
Was ich also gemacht habe um Quasi das sBasket Module zu ersetzten, war folgendes:
Für jede public Method ein replace hook registriert:
$this->subscribeEvent(‚sBasket::sGetAmount::replace‘, ‚setCustomBasket‘);
$this->subscribeEvent(‚sBasket::sGetAmountArticles::replace‘, ‚setCustomBasket‘);
// usw. für alle pulic methods
sBasketCustom in MeinPlugin/Component/ angelegt, was von sBasket erbt und die gewünschten Methoden überschreibt
Das Event Callback setCustomBasket implementiert mit:
public function setAdminSession(\Enlight_Event_EventArgs $args) {
// alternativ kann man z.B. auch sBasket verwenden und einfach die Parameter ändern, falls das reicht
$customBasket = new sBasketCustom();
call_user_func_array(array($customBasket, $args->getMethod()), $args->getArgs());
$args->setReturn($result);
}