Hallo, Auf welchen event muss ich zugreifen, wenn ich auf den Zahlungspflichtig Bestellen Button reagieren möchte? Also, wenn auf den Button geklickt wird, will ich noch eine Sache im DB machen, aber die normale Funktionalität soll dabei natürlich nicht geändert werden.
Zur Zeit versuche ich mit der Event ‘Enlight_Controller_Action_Frontend_Finish’ zu arbeiten. Das klappt auch, aber die Funktion wird auch dann ausgeführt, wenn der User auf der Confirm Seite ist aber die AGB nicht angeklickt hat (also kein Haken gesetzt) und klickt trotzdem auf den Bestellen button so kommt er auch auf den checkout finish Seite weshalb die Funktion welcher bei der ‘Enlight_Controller_Action_Frontend_Finish’ Event definiert wurde trotzdem ausgeführt wird. Ich will aber, dass die Funktion nur dann ausgeführt wird wenn die Bestellung wirklich bestellt wurde. Also die AGB wurde bei checkout/confirm bestätigt und dann auf Bestellen geklickt, dann führe die Funktion aus… Bootstrap ... public function install() { $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_Frontend\_Finish', 'onCheckoutFinishAction' ); return true; } public function onCheckoutFinishAction(Enlight\_Event\_EventArgs $arguments) { /\*\*@var $checkoutController Shopware\_Controllers\_Frontend\_Checkout\*/ $checkoutController = $arguments-\>getSubject(); $customerId = Shopware()-\>Session()-\>sUserId; ... //mache was in der DB Tabelle... ... }
Hi, es gibt in der sOrder-Core-Classe eine Methode sSaveOrder - ein after-Hook darauf könnte sein, was du suchst. lG Daniel
Dank deiner Antwort bin ich auf die Idee gekommen das erst einmal mit dem sOrder Event ‘Shopware_Modules_Order_SaveOrder_ProcessDetails’ zu probieren und es klappt so wie ich es mir vorgestellt habe. Danke an dieser Stelle. Aber eine Frage habe ich trotzdem noch… Laut Dokumentation dieses Events Shopware Wiki Event Auflistung kann man auf die Parameter von Enlight_Event_EventArgs zugreife, z.B. [sAmount] => 181.45. Ich dachte ich könnte darauf folgendermaßen zugreifen. $sOrder = $arguments->getSubject(‘sAmount’); Leider bekomme ich so nichts ausgegeben. Wie kann ich auf den Parameter sAmount zugreifen?
Hi, $args->get(‚sAmount‘) sollte gehen. getSubject() liefert dir eine Referenz auf das Objekt, das das Event wirft, hier als sOrder. lG Daniel
Habs probiert… also bei mir wird nichts ausgegeben. Die Ausgabe über Shopware()->Debuglogger()->info('OrderInfo: '.$sOrder); bleibt leer. ??
Hallo jakko, kann es sein, dass du Daniel’s Code eins zu eins kopiert hast? Du benutzt in deinem Beispiel die Variable $arguments, Daniel dagegen benutzt $args. Wenn du das einfach so übernommen hast, dürfte es reichen wenn du erneut auf $arguments zugreifst, also: $sOrder = $arguments-\>get('sAmount')
Gruß, Patrick :shopware:
Nein nein… ich hab schon darauf geachtet. Keine Ausgabe bisher, es bleibt leer Der Parameter ‘sAmount’ befindet sich ja innerhalb von ‘subject’, deswegen klappt der Aufruf $sOrder = $arguments->get(‘sAmount’); vielleicht nicht ohne weiteres. Also ich glaube es müsste irgendwie anders geschrieben werden, aber ich weiß nicht wie…? Argument Dump von ‘Shopware_Modules_Order_SaveOrder_ProcessDetails’ stdClass Object ( [\_\_CLASS\_\_] =\> Enlight\_Event\_EventArgs [\_processed] =\> [\_name] =\> Shopware\_Modules\_Order\_SaveOrder\_ProcessDetails [\_return] =\> [\_elements] =\> Array ( [subject] =\> stdClass Object ( [\_\_CLASS\_\_] =\> Shopware\_Proxies\_sOrderProxy [sUserData] =\> Array(3) [sBasketData] =\> Array(17) [sShippingData] =\> Array(1) [sComment] =\> [paymentObject] =\> [sAmountNet] =\> 152.47739495798 [sAmount] =\> 181.45 [sAmountWithTax] =\> 181.45 [sShippingcosts] =\> 3.9 [sShippingcostsNumeric] =\> 3.9 [sShippingcostsNumericNet] =\> 3.28 [sSYSTEM] =\> sSystem [bookingId] =\> [sOrderNumber] =\> 20015 [dispatchId] =\> 9 [uniqueID] =\> [sNet] =\> [o\_attr\_1] =\> [o\_attr\_2] =\> [o\_attr\_3] =\> [o\_attr\_4] =\> [o\_attr\_5] =\> [o\_attr\_6] =\> ) ...
Hi, dem Event wird ja auch nirgends sAmount übergeben - ich dachte, das hättest du schon sicher gestellt :): $this-\>eventManager-\>notify('Shopware\_Modules\_Order\_SaveOrder\_ProcessDetails', array( 'subject' =\> $this, 'details' =\> $this-\>sBasketData['content'], ));
Dann kannst du auch nicht darauf zugreifen. Du kannst dir mit $order = $args-\>getSubject()
aber das sOrder-Objekt hohlen und darauf dann $order->sAmount ausführen, weil die Properties ja alle public sind. lG Daniel
Super… jetzt gehts danke…