hi, ich habe wie folgt ein Event-Listener registriert: $this-\>subscribeEvent( 'Shopware\Models\Order\Order::preUpdate', 'onOrderUpdate' );
die Methode ‚onOrderUpdate‘ wird jetzt beim update einer Bestellung aus der Bestellübersicht 2 mal aufgerufen. Kann mir jemand sagen warum das so ist und was ich dagegen machen kann? vielen Dank und viele Grüße, Heiko
Hallo hbee, warum das so ist kann ich dir zwar leider nicht sagen, aber vielleicht funktioniert folgendes als Workaround. Deklariere einfach eine Eigenschaft in der Bootstrap, die eine Aussage darüber trifft, ob das ganze schon bearbeitet wurde. Nennen wir diese mal einfach „$isProcessed“. Dann kannst du in deiner onOrderUpdate einfach prüfen, ob diese schon true ist. Wenn nicht dann mach was auch immer du mit der Bestellung anstellst und setze $isProcessed auf true. Beim zweiten aufruf wird der eigentliche Code dann nicht mehr aufgerufen, sondern die Funktion schon am Anfang verlassen. var $isProcessed = false; public function onOrderUpdate(Enlight\_Event\_EventArgs $args) { if($this-\>isProcessed) { return; } //mach irgendwas //mach noch mehr $this-\>isProcessed = true; }
Ich denke es wird jedoch noch einen eleganteren weg geben. Mit freundlichem Gruß KBackhaus
Hallo KBackhaus, vielen Dank für deine Antwort. So in etwa habe ich es jetzt auch gelöst. Wäre halt nur interessant zu wissen, warum der Event 2 mal abgefeuert wird. Vielen Dank und viele Grüße, Heiko
Warum weiß ich leider auch nicht, was ich aber weiß ist, dass dies auf so ziemlich alle Events zutrifft. Z.B. wenn man sBasket::sUpdateArticle anfässt, oder sArticles::sGetCategoryProperties…
was bei mir mal war: teilweise wird über jquery ein submit gebindet, dadurch kann sein, dass ein submit zweimal ausgeführt wird.