# \[GELÖST\] o\_attr\_1 - 6 Attribute für eigene Zwecke nutzen

**URL:** https://forum.shopware.com/t/gelost-o-attr-1-6-attribute-fur-eigene-zwecke-nutzen/31055
**Category:** Programmierung
**Created:** [1. Oktober 2015 um 21:47 UTC](https://forum.shopware.com/t/gelost-o-attr-1-6-attribute-fur-eigene-zwecke-nutzen/31055 "2015-10-01T21:47:16Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)
#### Post date: [1. Oktober 2015 um 21:47 UTC](https://forum.shopware.com/t/gelost-o-attr-1-6-attribute-fur-eigene-zwecke-nutzen/31055/1 "2015-10-01T21:47:16Z")

</div>

Hallo liebe shopware - Gemeinde, ich würde gerne die Attributfelder von s\_order\_attributes zum Speichern zusätzlicher Werte nutzen. Ich habe auch schon alles notwendige im Plugin umgesetzt, um ein neues Eingabefeld auf der Confirmseite im entsprechenden Formular zu erhalten: ` private function subscribeEvents(){ $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PreDispatch\_Frontend', 'onPreDispatch' ); $this-\>subscribeEvent( 'Shopware\_Controllers\_Frontend\_Checkout::saveOrder::before', 'onSaveOrder' ); } public function onPreDispatch(Enlight\_Event\_EventArgs $arguments){ /\* Hier füge ich dem confirm-Form ein weiteres Inputfeld zu\*/ /\* Endresultat im Formular: <input type="text" id="o_attr_1" name="o_attr_1" value="" class=""> \*/ } public function onSaveOrder(Enlight\_Hook\_HookArgs $args) { $order = $args-\>getSubject(); }` Nur bei der onSaveOrder komme ich nicht weiter, da am Ende das Feld attribute1 von s\_order\_attributes immer leer bleibt - gleiches bei der E-Mail. sSaveOrder in sOrder.php nimmt ja die Attributfelder entgegen ($this-\>o\_attr\_1) und speichert diese ab. Nur wie übergebe ich der Funktion durch meine onSaveOrder den Wert, damit diese ihn verarbeiten kann? Ich habe auch die anderen Forumthemen durchgearbeitet (bspw.: [programmierung-f56/freitextfelder-in-bestellung-t8839.html](http://forum.shopware.com/programmierung-f56/freitextfelder-in-bestellung-t8839.html)), bin aber leider zu keinem Ergebnis gekommen. Könnte mir jemand auf die Sprünge helfen? Beste Grüße Sebastian

---

<div class="post-metadata">

### Author: ![Creatixx](https://avatars.discourse-cdn.com/v4/letter/c/c67d28/32.png) [@Creatixx](https://forum.shopware.com/u/Creatixx)
#### Post date: [1. Oktober 2015 um 22:05 UTC](https://forum.shopware.com/t/gelost-o-attr-1-6-attribute-fur-eigene-zwecke-nutzen/31055/2 "2015-10-01T22:05:12Z")

</div>

Vielleicht hilft dir [das](https://gist.github.com/sthamann/5310948) etwas?!

---

<div class="post-metadata">

### Author: ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)
#### Post date: [1. Oktober 2015 um 22:15 UTC](https://forum.shopware.com/t/gelost-o-attr-1-6-attribute-fur-eigene-zwecke-nutzen/31055/3 "2015-10-01T22:15:23Z")

</div>

[quote=„Creatixx“]Vielleicht hilft dir [das](https://gist.github.com/sthamann/5310948) etwas?![/quote] Hallo, das hatte ich auch schon gefunden, nur erstelle ich da ja neue Spalten statt die bestehenden (o\_attr\_1 - 6) zu nutzen (es gibt ja auch ein erweitertes, zweites Beispiel zu deinem: [https://gist.github.com/sthamann/5343247](https://gist.github.com/sthamann/5343247)). Ich konnte dort auch nicht wirklich rauslesen, wie ich da meine Daten, die ich neu im Confirm-Formular eingebe, dann in die Datenbank übertrage (dort wird ja ein fester Wert „Test“ übergeben und keine Formulardaten). Und ist die Variable bei dem Beispiel dann auch in der sOrder-Mail und in der Datenbank? Beste Grüße Sebastian

---

<div class="post-metadata">

### Author: ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)
#### Post date: [2. Oktober 2015 um 08:24 UTC](https://forum.shopware.com/t/gelost-o-attr-1-6-attribute-fur-eigene-zwecke-nutzen/31055/4 "2015-10-02T08:24:01Z")

</div>

Hallo, diese Felder werden doch sicherlich von einigen Plugins genutzt - hat da keiner einen Tipp für mich, wie ich den Wert an die eigentliche sSaveOrder in sOrder.php weitergebe? Wenn ich den Ansatz von Stefan Hamann (shopware AG Team) verfolgen würde: `class Shopware\_Plugins\_Frontend\_SwagTestCases\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { /\*\* \* Install plugin method \* \* @return bool \*/ public function install(){ // Add 2 new columns to s\_order\_attributes Shopware()-\>Models()-\>addAttribute('s\_order\_attributes','myPrx','Test1','varchar(255)', false, 0); Shopware()-\>Models()-\>addAttribute('s\_order\_attributes','myPrx','Test2','varchar(255)', false, 0); $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); Shopware()-\>Models()-\>generateAttributeModels( array('s\_order\_attributes') ); $this-\>subscribeEvent('Shopware\_Modules\_Order\_SendMail\_FilterVariables','OnBeforeSendOrderConfirmation'); return array('success' =\> true, 'invalidateCache' =\> array('backend', 'proxy')); } public function OnBeforeSendOrderConfirmation (Enlight\_Event\_EventArgs $args){ $orderVariables = $args-\>getReturn(); $ordernumber = $orderVariables["ordernumber"]; // Find order id by order number $order = Shopware()-\>Models()-\>getRepository('Shopware\Models\Order\Order')-\>findOneBy(array('number'=\>$ordernumber)); $orderAttributeModel = Shopware()-\>Models()-\>getRepository('Shopware\Models\Attribute\Order')-\>findOneBy( array("orderId"=\>$order-\>getId())); if ($orderAttributeModel instanceof \Shopware\Models\Attribute\Order){ $orderAttributeModel-\>setMyPrxTest1("Test"); $orderAttributeModel-\>setMyPrxTest2("Test2"); Shopware()-\>Models()-\>persist($orderAttributeModel); Shopware()-\>Models()-\>flush(); } $args-\>setReturn($orderVariables); } }` könnte ich dann ja das Inputfeld wie bei mir in das entsprechende Formular einfügen. Leider ist bei mir bei jeder Bestellung auch bei $orderAttributeModel-\>setMyPrxTest1(„Test“); das Feld myPrx\_Test1 leer. Woran könnte das liegen? Ich habe das Beispiel so übernommen. Statt der festen Werte Test und Test2 müsste dann ja aber meine Formulareingabe verwendet werden. Würde ich dann über: ` $postData = $args-\>getSubject()-\>Request()-\>getPost(); $myprx\_test1 = $postData["myPrx\_Test1"];` an den Eingabewert rankommen und könnte diesen dann über: `$orderAttributeModel-\>setMyPrxTest1($myprx\_test1);` an die Datenbank und in die E-Mail-Vorlage übertragen? Beste Grüße Sebastian

---

<div class="post-metadata">

### Author: ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)
#### Post date: [2. Oktober 2015 um 10:19 UTC](https://forum.shopware.com/t/gelost-o-attr-1-6-attribute-fur-eigene-zwecke-nutzen/31055/5 "2015-10-02T10:19:26Z")

</div>

Hallo, um den Ansatz von Stefan Hamann (shopware AG Team) weiter zu verfolgen: `class Shopware\_Plugins\_Frontend\_SwagTestCases\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { /\*\* \* Install plugin method \* \* @return bool \*/ public function install(){ // Add 2 new columns to s\_order\_attributes Shopware()-\>Models()-\>addAttribute('s\_order\_attributes','myPrx','Test1','varchar(255)', false, 0); Shopware()-\>Models()-\>addAttribute('s\_order\_attributes','myPrx','Test2','varchar(255)', false, 0); $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); Shopware()-\>Models()-\>generateAttributeModels( array('s\_order\_attributes') ); $this-\>subscribeEvent('Shopware\_Modules\_Order\_SendMail\_FilterVariables','OnBeforeSendOrderConfirmation'); return array('success' =\> true, 'invalidateCache' =\> array('backend', 'proxy')); } public function OnBeforeSendOrderConfirmation (Enlight\_Event\_EventArgs $args){ $orderVariables = $args-\>getReturn(); $ordernumber = $orderVariables["ordernumber"]; // Find order id by order number $order = Shopware()-\>Models()-\>getRepository('Shopware\Models\Order\Order')-\>findOneBy(array('number'=\>$ordernumber)); $orderAttributeModel = Shopware()-\>Models()-\>getRepository('Shopware\Models\Attribute\Order')-\>findOneBy( array("orderId"=\>$order-\>getId())); if ($orderAttributeModel instanceof \Shopware\Models\Attribute\Order){ $orderAttributeModel-\>setMyPrxTest1("Test"); $orderAttributeModel-\>setMyPrxTest2("Test2"); Shopware()-\>Models()-\>persist($orderAttributeModel); Shopware()-\>Models()-\>flush(); } $args-\>setReturn($orderVariables); } }` Die beiden Felder myPrx\_Test1 und myPrx\_Test2 werden bei der Tabelle s\_order\_attributes erstellt, in der Bestellbestätigungsemail sind Sie auch vorhanden ({$attributes.myPrx\_Test1} und {$attributes.myPrx\_Test2}). Trotzdem bleiben Sie sowohl in der Datenbank als auch in der E-Mail leer, obwohl durch: ` $orderAttributeModel-\>setMyPrxTest1("Test"); $orderAttributeModel-\>setMyPrxTest2("Test2");` aus meiner Sicht ja Werte gesetzt wurden. Ich habe das Beispiel ja erst einmal 1 zu 1 übernommen, verschrieben oder ähnliches kann ich mich ja nicht haben. Hat jemand eine Idee, warum die Felder leer sind? Beste Grüße Sebastian

---

<div class="post-metadata">

### Author: ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)
#### Post date: [2. Oktober 2015 um 15:50 UTC](https://forum.shopware.com/t/gelost-o-attr-1-6-attribute-fur-eigene-zwecke-nutzen/31055/6 "2015-10-02T15:50:43Z")

</div>

Hallo, das Speichern der Werte aus den Code-Beispielen funktioniert nun - ein anderes Plugin hat das Speichern der Werte abgefangen. Nur löst das natürlich nicht die Anfangsfrage,wie man die Attribute o\_attr\_1 - 6 nutzen kann. Beste Grüße Sebastian
