Frontend: Zusatzfelder im Checkout

Hallo Zusammen,

ich habe in den Artikel-Details im Frontend ein zusätzliches Feld hinzugefügt. Der Wert des Feldes soll in der Datenbank ( s_order_basket_attributes und s_order_attributes ) gespeichert. sowie in der Bestätigungsmail wiedergegeben werden. Die entsprechenden Felder in den Tabellen habe ich bereits angelegt.

Per “Shopware_Controllers_Frontend_Checkout::ajaxAddArticleCartAction::after” habe ich den Checket Controller gehookt. Allerdings weiß ich jetzt nicht, wie ich

  • Textfelder abfange
  • Werte in s_order_basket_attributes bekomme
  • Werte bei Bestellabschluss in s_order_attributes bekomme.

Ich habe mich die letzten Tage kreuz und quer durch die Dokumentation gelesen, hänge nun aber seit dem Wochenende an diesem Punkt.

Das Auslesen der Werte für E-Mail Bestätigung und Rechnung/Lieferschein bekomme ich sehr wahrscheinlich hin.

Ich würde mich freuen, wenn jemand ein kleines Beispiel hat, das er mir zur Verfügung stellt.
Ich bin auch für weiterführende Links dankbar. Primär würde ich mich aber, da ich schon so viel Zeit investiert habe, mehr freuen, wenn ich ein Beispiel bekomme.
Dokumentation zu diesem Thema würde ich später lesen (da ich mittlerweile verzweifle).

Vielen Dank im Voraus!

//Kafke

Guten Morgen kafke,

um die besser Helfen zu können müsste man Wissen ob der Kunde selber eingaben in dem Feld macht oder das Feld vom Shopadmin befüllt wird. 
Ich gehe von deiner Beschreibung her davon aus das es der Shopadmin ist :wink:

Du bekomsmt in der ajaxAddArticleCartAction als Requestparameter die ordernumber mit die du auslesen kannst, so z.B.: 

public function afterAjaxAddArticleCartAction(\Enlight_Hook_HookArgs $args) {
    $controller = $args->getSubject();
    $ordernumber = $controller->Request()->getParam('sAdd');
}

Anhand der ordernumber kannst du dir dann den passenden Artikel aus der Datenbankziehen inkl. aller Attribute.
 

Um dir anzuschauen wie der Warenkorbprozess abläuft schau dir die Methoden 
engine/Shopware/Core/sBasket.php::sAddArticle() und
engine/Shopware/Core/sBasket.php::sGetBasket() an.

Noch ein kleiner Ansatz: Wenn dein Artikel hinzugefügt wurde könntest du die Attribute auslesen und einfach ein Update auf den entsprechenden Eintrag in der s_order_attributes machen. 

Ich hoffe ich konnte dir Helfen :wink:

Grüße,
Simon

Hallo Simon,

vielen Dank für deine Antwort!
Der Kunde soll das Feld selbst befüllen können - hätte ich erwähnen können :slight_smile:

Ich hab immer den Gedanken gehabt mich in den INSERT einzuklinken. An ein UPDATE nach dem INSERT hab ich gar nicht gedacht.
Die Methoden der sBasket.php habe ich mir schon angeguckt.

Da ich gerade unterwegs bin kann ich noch nicht sagen ob dein Ansatz mich zu einer Lösung führt, ich denke aber schon.
Ich werde heute Abend ein Feedback dazu geben.

Nochmal Danke und viele Grüße,
//Kafke

Hallo Simon,

ich hab durch deinen Ansatz nun den Wert in die Tabelle s_order_basket_attributes bekommen.
Ich werd nach dem Wochenende mal schauen ob ich die Werte auch wieder aus der Datenbank bekomme um sie im weiteren Bestellprozess im Frontend anzeigen zu lassen.

Du hast mir auf jeden Fall schon sehr geholfen!

Vielen Dank dafür.

Grüße und schönes Wochenende,

//Kafke