Plugin: Wert bei Bestellabgabe in die Datenbank schreiben

Hallo, ich arbeite mich gerade in die Pluginentwicklung ein. Das erste eigene Plugin läuft auch soweit und macht im Frontend was es soll, vor allem Dank der guten Tutorials von Shopware. Allerdings habe ich leider keine Infos gefunden, wie ich beim Bestellabschluß zusätzliche Daten in die Datenbank schreiben kann. Der konkrete Fall: auf der Bestellabschlußseite (checkout/confirm) wird dem Kunden eine per Plugin generierte Nummer angezeigt. Diese soll zu Archivierungszwecken bei den Bestelldaten in die Shop-Datenbank geschrieben werden. Gibt es eine sinnvollere Methode als sich auf Enlight_Controller_Action_PostDispatch_Frontend_Checkout zu setzen und bei der Aktion „finish“ den Wert als separaten Datenbank-Query zu schreiben? Falls jemand ein Tutorial oder Plugin kennt, wie in solchen Fällen vorgegangen werden kann - ich schau es mir gern an. Gruß Mario

hi, du kannst dich auf sSaveOrder registrieren $this-\>subscribeEvent( 'sOrder::sSaveOrder::before', 'onSaveOrder', 0 ); und dann deinen Wert in einem Freitextfeld speichern: public function onSaveOrder(Enlight\_Hook\_HookArgs $args) { $order = $args-\>getSubject(); $order-\>o\_attr\_1 = Shopware()-\>System()-\>\_POST['o\_attr\_1']; } Bin mir nicht sicher ob das in 4.3 noch funktioniert. sollte aber eigentlich…

1 „Gefällt mir“

Danke für den Tipp, ich werde es mir heute Abend mal anschauen. Hier läuft noch eine 4.2.3 insofern sollte das passen. Gruß Mario

Hallo hbee, hat perfekt funktioniert, großes Dankeschön an dich! Noch eine Frage zu den Freitextfeldern einer Bestellung: kannst du sagen, ob es gewisse Regeln zur Nutzung gibt? Könnte mir vorstellen, das jeder Plugin-Autor das Freitextfeld 1 verwendet und es dann zu Problemen kommt, wenn zwei Plugins das selbe Feld nutzen. Gedanke: man könnte die Nummer des Freitextfeldes als Backendkonfiguration auswählen lassen Gruß Mario

ich glaube nicht, dass es dazu Regeln gibt bzw. dass sich jemand daran halten würde :wink: wenn das Feld in der Config auswählbar wäre, wäre das sicherlich von Vorteil.

1 „Gefällt mir“

Hallo :slight_smile: Ich habe dazu eine Frage. Irgendetwas mache ich wohl falsch. Meine Methode sieht folgender Maßen aus public function onSaveOrder(Enlight\_Hook\_HookArgs $args) { $order = $args-\>getSubject(); $order-\>o\_attr\_1 = $order-\>Request()-\>getParam('o\_attr\_1'); } Wenn ich mir den Wert in $order-\>Request()-\>getParam('o\_attr\_1') ausgebe, bekomme ich auch den richtigen Wert angezeigt, jedoch bekomme ich im Frontend die Fehlermeldung “Ups! Ein Fehler ist aufgetreten!” und im Log steht core.ERROR: exception ‘Enlight_Exception’ with message ‘Property “o_attr_1” not found failure’ in /Applications/MAMP/htdocs/shopware/engine/Shopware/Plugins/Community/Frontend/caroTestPlugin/Bootstrap.php:78 Enlight_Class->__set(‘o_attr_1’, ‘TEST’) Meine Shopware Version ist 4.3.2 Was mache ich denn falsch? :wtf::cry: Liebe Grüße