Dynamische Preisermittlung und Größeneingabe

Hallo zusammen,

Aktuell bin ich mit einem Partner dabei einen Shop für einen Kunden umzusetzen. Dabei sind wir jetzt an eine Problematik gekommen, wo ich nicht wirklich weiter weiß. Kurz zur Erläuterung:
Ein Teil der Artikel soll in der Größe frei definiert werden können. Es handelt sich hier um Drucke die in Auftrag gefertigt werden, dabei ist die Größe frei einstellbar „von bis cm“. Heißt konkret der Endkunde klickt sich über Varianten sein Produkt zusammen und eine Auswahlmöglichkeit bei den Varianten soll die eingabe eine Größe sein.

Der Maximalpreis steht auf der entsprechenden Variante. Für die Ermittlung der Preise steht ein Backend zur Verfügung, dass per HTTP angesprochen werden kann. Diesem werden die Daten zu den Varianten und der Größe übergeben,  woraus über relativ komplexe Abhängigkeiten der Preis berechnet wird. Dieses Backend habe ich über einen Hook an sGetArticle gehängt. Damit funktioniert die Anzeige und das auswählen der Varianten auch wirklich gut. Allerdings wird im sBasket der Artikel direkt aus der Datenbank geholt, womit der Hook nicht greift. Außerdem kann es in diesem Umfeld passieren, dass zwei Artikel mit der selben Artikelnummer aber unterschiedlichen Preisen im Warenkorb liegen (unterschiedliche Größe).

Ist das mit Shopware überhaupt möglich ohne den kompletten Warenkorb umzuschreiben?
Kann ich im Warenkorb weitere Informationen zu einem Artikel speichern? (Größe)
Kann ich zwei Artikel mit der selben Artikelnummer in den Warenkorb legen?
Gibt es über das Hook System eine Möglichkeit eine komplette Klasse auszutauschen?

Ich hoffe mir kann hier jemand weiter helfen und ein paar Tipps geben. Dafür bedanke ich mich schon einmal im voraus.

Viele Grüße
Nikolas Meyer

Hi Nikolas,

ich geh mal deine Fragen am Ende durch: 

@nmeyer schrieb:

Ist das mit Shopware überhaupt möglich ohne den kompletten Warenkorb umzuschreiben?

Komplett umschreiben musst du ihn nicht, anpassen schon. Für den Preis wäre eine Möglichkeit dieser Hook: sBasket::sUpdateArticle::after
In sUpdateArticle wird der Preis aus der DB gelesen, hiermit kannst du ihn direkt danach nochmal ändern. Ist nicht ganz so schön, evtl gibt es noch eine bessere Möglichkeit, aber alles was mit dem Warenkorb zu tun hat ist nicht unbedingt ideal was Erweiterbarkeit angeht.

Kann ich im Warenkorb weitere Informationen zu einem Artikel speichern? (Größe)

Ja, Stichwort Attribute. Die Tabelle die du suchst ist s_order_basket_attributes
Wie genau du eigene Attribute hinzufügst findest du in der Doku oder auch schon des öfteren im Forum.

Kann ich zwei Artikel mit der selben Artikelnummer in den Warenkorb legen?

Bin ich mir gerade nicht sicher. Müsste aber gehen. Falls nicht im Standard kann man es auf jeden Fall anpassen.

Gibt es über das Hook System eine Möglichkeit eine komplette Klasse auszutauschen?  

Nein. Du kannst dich vor oder hinter public Funktionen hängen oder einzelne Funktionen ersetzen. Ganze Klassen kannst du nicht ersetzen. Neuere Komponenten kann man ersetzen, Stichwort Decorator und Services Das ist aber im Warenkorb bisher nirgendwo implementiert.

Falls du konkretere Fragen oder Probleme hast einfach nochmal hier melden :slight_smile: