Kann ich ein zusazlich attribute zum ajaxAddArticleCart aktion passen?

Hi!

Ich habe ein Produkt, wo ein zusazlich Attribute gespeichert soll sein, wenn dieser Produkt in Warenkorb gelegt ist. Und ich sehe das wenn „Add to cart“ geklickt ist, ist normaleweise

checkout/ajaxAddArticleCart angerufen, mit sAdd attribute (article number) und ein callback (diese callback funktion verstehe ich noch nicht ganz genau). 
Gibts ein möglichkeit das ich zusatlich auch ein nummer passe und dan die nummer zum artikel in warenkorb (und später in Bestellung) sehen kann?

Weil ich muss ein Email schicken wenn bestellung bezahlt ist, und inhalt ist abhengig von diese zusatlich Attribute.

Vielen dank für alle Infos!

Das geht. Du müsstest dir ein Plugin schreiben, dass folgendesn macht:

  • Freitextfeld an der Tabelle s_order_basket_attributes und s_order_details_attributes anlegen
  • Template der Buybox erweitern, sodass du dort eine Zahl eintragen kannst. Innerhalb des Tags.
  • die ajaxAddArticleCart Action hooken, sodass nach dem ausführen der Action deine Zahl in dein Freitextfeld geschrieben wird
  • in der Klasse sBasket::saveOrder gibt es irgendwo ein Event das gefeuert wird. Da müsstest du dich dran hängen in dein Freitextfeld aus der s_order_basket_atttributes in die s_order_detail_attributes übernehmen. Ich glaube der Eintrag in der s_order_baskeit wird irgendwann im Laufe der saveOrder Methode gelöscht. Evtl. musst du da mit zwei Events arbeiten. 1. Event Freitextfeld auslesen bevor es gelöscht wird. 2. Event Freitextfeld füllen nachdem die Order erstellt wurde.

Ich denke so müsste es theoretisch funktionieren. Habe mir den Prozess mit der Order in Shopware nicht genau angeschaut. Keine Garantie das es nicht irgendwo ne kleine Abweichung gibt.

1 „Gefällt mir“

Vielen dank für deine antwort!
Diese „extra“ field kommt schon von system, weil das ein referenz zum eine andere custom tabelle entity ist. Ich versuche das mit deine hilfreiche punkte zum machen und wenn es nicht weiter geht melde ich nochmal und suche mehr hilfe :slight_smile:

Ich versuche jetzt wieder das gleiche und leider finde ich nich die richtige events…

Ich habe form so gemacht das es nach checkout/ajaxAddArticleCart geht und sAdd parameter hat ein produkt id und cPhotoId parameter ist gleich photo id. Jetzt habe ich 2 problemen:

  1. wenn ein produkt mit gleiche product id schon in warenkorb ist, dann ist $chkBasketForArticle nicht false und deswegen ist diese code ausgeführt (detei engine/Shopware/Core/sBasket.php

    if ($chkBasketForArticle) {
    $this->sUpdateArticle($chkBasketForArticle[‚id‘], $quantity);

     return $chkBasketForArticle['id'];
    

    }

deswegen ist dann kein neue „zusatliche“ produkt in korb aber nur gleiche mit $quantity vergrosern. Ist es möglich für nur ein produkt sagen das wenn benutzer mehrfach gleiche produkt in korb hinlegt, das es als mehrere produkte bleibt? Ich habe gechekt function checkIfArticleIsInBasket, aber diese query kann ich nicht mit ein event erweitern…, weil event gibt nur ein notify Shopware_Modules_Basket_AddArticle_CheckBasketForArticle und wenn ich richtig verstehe diese Shopware events tutorial, kann ich mit notify nix ändern?

 

  1. in funktion sAddArticle  (auch sBasket.php datei)  gibt 3 events:
  • Shopware_Modules_Basket_AddArticle_Start (als notifyuntil)
  • Shopware_Modules_Basket_AddArticle_FilterSql (als filter)
  • Shopware_Modules_Basket_AddArticle_Added (als notify)

wenn ich richtig verstehe, kann ich erste benutzen wenn ich ein product in warenkorb nicht haben will
zweite wenn ich produkt selber ändern will
und für mein zweck soll ich dann Shopware_Modules_Basket_AddArticle_Added nehmen und hier nochmal von datenbank model bei ID finden, attribute erstellen (von request), und speichern?
gibt es a bessere möglichkeit?

 

Vielen dank für hilfe.

  1. Das ist richtig. Mit dem Event kannst du nichts Ändern. Die letzte Lösung ist ein Hook zu nutzen und die Methode checkIfArticleIsInBasket() zu ersetzen oder mit einem After Hook. Danach noch eine zusätlziche Prüfung durchzuführen. Das Hook System wir auf dem von dir genannten Link ganz unten berschrieben.

  2. Es gibt bestimmt noch andere Lösungen. Aber ich denke du hast dir schon die beste und sauberste überlegt. Ich würde es genauso machen.