Event/Hook nach Bestellabschluss aber vor Bezahlplugins

Moin, Ich muss bei Bestellabschluss (Zahlungspflichtig Bestellen) Warenbestände final abfragen, jedoch bevor der Kunde zu den Bezahlplugins geleitet wird. $this-\>subscribeEvent('sOrder::sSaveOrder::after','afterSaveOrder'); $this-\>subscribeEvent('Shopware\_Modules\_Order\_SendMail\_FilterVariables','onSaveOrder'); Die Events/Hooks funktionieren, aber zum Beispiel wird das Paypal/Sofortkauf/Paymill Plugin immer vorher gefeuert. Wie stelle ich denn sicher, dass mein Event wirklich vor den anderen nach Bestellabschluss gefeuert wird. Ich suche mir hier schon nen Wolf… Gruß Udo

Oder anders gefragt: Wo kann ich denn sehen wie die Reihenfolge der gestarteten Events nach Klick auf „Zahlungspflichtig Bestellen“ ist. Und wenn zwei Plugins das auf das gleiche Event regieren, wo wird festgelegt welches Plugin dann zuerst aufgerufen wird? Je nach Installationsreihenfolge?

Hallo Udo, die Warenkorb-Events: http://community.shopware.com/Shopware- … 4_866.html die Auftrags-Events: http://community.shopware.com/Shopware- … 5_866.html Bei PayPal wird einem durch “Direkt zu PayPal” doch schon nach dem Legen des Artikels in den Warenkorb die Möglichkeit gegegeben, zu PayPal zu wechseln - da müsstest du dein Event ja ansich schon beim Legen des Artikel in den Warenkorb feuern (Wenn es vor der Bezahlmethode ausgeführt werden soll)? Beste Grüße Sebastian

[quote=“sschreier”]Hallo Udo, Bei PayPal wird einem durch “Direkt zu PayPal” doch schon nach dem Legen des Artikels in den Warenkorb die Möglichkeit gegegeben, zu PayPal zu wechseln - da müsstest du dein Event ja ansich schon beim Legen des Artikel in den Warenkorb feuern (Wenn es vor der Bezahlmethode ausgeführt werden soll)? [/quote] Erstmal Danke für die Hilfe. Das stimmt, die Funktion “Direkt zu Paypal” habe ich allerdings deaktiviert. Mein Plugin muss also nur beim Bestellabschluss ausgeführt werden. Der Tipp mit den sOrder Events funktioniert nicht. Selbst wenn ich dort das erste Event nehme (Shopware_Modules_Order_GetOrdernumber_FilterOrdernumber), wird das Paypal Plugin immernoch vorher gefeuert. Die System Events (Enlight_Controller_Action_PreDispatch_*) greifen auch nicht vorher. /\*\* \* Subscribes a plugin event. \* \* The given parameters and the internal instance of the Enlight\_Plugin\_Namespace\_Config \* are used to instantiate a new Enlight\_Event\_Handler\_Plugin. \* This Enlight\_Event\_Handler\_Plugin is subscribed over the namespace subscriber. \* \* @param string $event \* @param callback $listener \* @param integer $position \* @return Enlight\_Plugin\_Bootstrap\_Config \*/ public function subscribeEvent($event, $listener, $position = null) Ich habe noch einen Parameter für die Reihenfolge zweier gleicher Events gefunden ($position), aber offensichtlich wird bei Paypal nicht das gleiche Event genutzt. Den Sourcecode vom Paypal Plugin kann ich nicht verständlich durchblicken… Noch eine Idee?

Moin, Ich wollte kurz meine Lösung für das Problem teilen. Da die Bezahlplugins eigene Controller haben, frage ich einfach ab ob einer dieser Controller angesprochen wird und führe dann meinen Code entsprechend vorher aus. private function subscribeEvents() { $this-\>subscribeEvent('Enlight\_Controller\_Action\_PreDispatch\_Frontend','onPreDispatchCheckout',1); } public function onPreDispatchCheckout(Enlight\_Event\_EventArgs $arguments) { /\*\*@var $subject Shopware\_Controllers\_Frontend\_Checkout \*/ $subject = $arguments-\>getSubject(); $request = $subject-\>Request(); $response = $subject-\>Response(); $action = $request-\>getActionName(); $view = $subject-\>View(); if(!$request-\>isDispatched() || $response-\>isException() || !$arguments-\>getSubject()-\>View()-\>hasTemplate() ) { return; } $controller = $request-\>getControllerName(); $session = Shopware()-\>Session(); $customerId = $session-\>sUserId; if(($customerId !== null && $action == "index" && ($controller == "payment\_paypal" || $controller == "tonur\_payment\_paymill" || $controller == "payment\_sofortbanking" || $controller == "payment\_paymill")) || ($action == "finish" && $controller =="checkout")) {...} } Vielleicht hilft es ja jemandem. Gruß Udo

1 „Gefällt mir“