Hooks für Gutschein einlösen im Warenkorb

Hallo, wo setze ich am Besten an, wenn ich einen eingebenen Gutschein-Code über einen eigenen Service zunächst validieren will? Danke für jeden Tipp/Link. LG Patrick

Hallo Patrick, Shopware Checkout Controller, Methode “addVoucherAction” -> Wird ausgelöst wenn der Kunde den Gutscheincode im Textfeld eingibt und auf Hinzufügen klickt Wenn das nicht reichen sollte… Shopware sBasket Class, Methode “sAddVoucher” Mit freundlichen Grüßen Oliver Denter

Hallo, danke für die Antwort bzw. den Tipp. Da ich den Gutschein-Code selber manipulieren will, frage ich mich nun, ob ich mit einem Hook oder Event arbeiten sollte. In jedem Fall soll der Gutschein-Code durch einen eigenen ersetzt werden, bevor Shopware diesen validiert. Der eingegebene Gutschein-Code ist in diesem Fall Teil einer externen Kampagne, die über eine HTTP-Request den eigentlichen Gutschein-Code zurück gibt. Dieser müsste dann an die Methode “sAddVoucher” übergeben werden. Bislang habe ich es nur geschafft den Gutschein-Code in einer eigenen Methode innerhalb des Plugins auszugeben. Dieser befindet sich in dem Objekt “$args”. Ich müsste das Objekt also entsprechend manipulieren nur fehlen mir gerade die passenden Methoden, wie z.B. “setParam” o.ä. In welcher Klasse müsste ich da nachschauen bzw. wo ansetzen? Hier mein “Plugin”: [code]<?php class Shopware_Plugins_Backend_MyPlugin_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{
public function install()
{

	$event = $this->createHook( 'sBasket', // Klassenname des Objekts, welches wir überladen wollen 'sAddVoucher', // Name der Methode, die wir modifizieren wollen 'onAddVoucher', // Name der lokalen, statischen Methode, die unsere Änderungen beeinhaltet Enlight\_Hook\_HookHandler::TypeBefore, // Unsere Methode wird NACH der Original-Methode aufgerufen 0 // Ausführungsposition ); $this-\>subscribeHook($event); // registriere neuen Hook return true; } static function onAddVoucher(Enlight\_Event\_EventArgs $args) { print\_r($args); } } [/code]

hi, generell ist es so, dass Events immer Hooks vorzuziehen sind. Wie du schon herausgefunden hast, kannst du durch den args Parameter auf die Daten zugreifen. Schaue aber bitte bevor du den Hook weiteverwendest kurz ob ein Event in der Nähe ist, welches sich für deine zwecke eignet. Hier findest du eine Eventübersicht: http://wiki.shopware.de/Event-Uebersicht-3.5.0_detail_596.html Im gleichen Artikel weiter unten findest du auch Informationen wie du die geänderten Daten wieder zurück in die Ursprungsfunktion übergeben kannst. Hoffe die Infos bringen dich weiter. Hier vielleicht noch einmal der Link zu unseren Developer’s Guide: http://wiki.shopware.de/Developers-Guide_cat_487.html Grüße, Marcel

Hallo, danke für die Info! Ein Event ist gleich am Anfang der betreffenden Methode “sAddVoucher” - ich könnte also auch ein Event verwenden. Ich muss jedoch den Parameter “$sTicket” überschreiben und hier den eigenen Gutschein-Code eingeben, bevor die Methode weiterausgeführt wird. Wie komme ich also an den Parameter in meiner eigenen Methode und wie kann ich diesen manipulieren? Coder betreffenden Methode: public function sAddVoucher($sTicket,$BASKET=''){ if (Enlight()-\>Events()-\>notifyUntil('Shopware\_Modules\_Basket\_AddVoucher\_Start', array('subject'=\>$this,'code'=\>$sTicket,"basket"=\>$BASKET))){ return false; } Eigener Code: [code]<?php class Shopware_Plugins_Backend_MyPlugin_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{
public function install()
{

	$event = $this->createEvent( 'Shopware\_Modules\_Basket\_AddVoucher\_Start', 'onAddVoucher' ); $this-\>subscribeEvent($event); return true; } static function onAddVoucher(Enlight\_Event\_EventArgs $args) { } } [/code]

Hallo, also ich weiß gerade echt nicht, wie ich in der Methode sAddVoucher die Variable „$sTicket“ über das eingebundene Event manipulieren kann. Hat da jemand eine Idee?

Hallo, ich habe jetzt eine Lösung für ein Problem gefunden - nach langer Suche habe ich in der Einführung Hook-System die Methoden des Objektes „Enlight_Hook_HookArgs“ gefunden. Hier habe ich die Möglichkeit mittels „$args->set(var,val);“ die Original-Parameter meiner Wunsch-Methode zu modifizieren. Und das klappt in meinem Fall - also verwende ich statt eines Events einen Hook - ist das korrekt so? <?php class Shopware_Plugins_Backend_MyPlugin_Bootstrap extends Shopware_Components_Plugin_Bootstrap { public function install() { $event = $this->createHook( 'sBasket', // Klassenname des Objekts, welches wir überladen wollen 'sAddVoucher', // Name der Methode, die wir modifizieren wollen 'onAddVoucher', // Name der lokalen, statischen Methode, die unsere Änderungen beeinhaltet Enlight\_Hook\_HookHandler::TypeBefore, // Unsere Methode wird NACH der Original-Methode aufgerufen 0 // Ausführungsposition ); $this-\>subscribeHook($event); // registriere neuen Hook return true; } static function onAddVoucher(Enlight\_Hook\_HookArgs $args) { $args-\>set('sTicket',"ZFT9WJ4J"); return true; } }

Hi, genauso sollte es funktionieren. Grüße, Marcel

1 „Gefällt mir“