Individuelle Produktparameter durch den Checkout durchschleifen?

Hallo,

 

vielleicht hat jemand eine clevere Idee:

Ich habe die buy-widget-form.html.twig der Produktseite so erweitert, dass /checkout/line-item/add neben den üblichen nun auch ein paar custom Formularfelder mitbekommt. Diese sollen danach im Checkout mehrfach sichtbar sein, und letztlich mit erfolgter Order gespeichert werden, damit die WaWi sie da wiederfindet. Die genaue Anzahl und Formatierung der Felder ändert sich je nach Artikel, aber alle Feldnamen sind in einem Array, quasi: $_REQUEST[lineitem][id][“meinefelder”][feld1…feld9]

Wie würdet ihr die Daten an die LineItems dann hängen?

Ich habe mir bislang den CartProcessor, den CartService und den CartItemAddRoute angeschaut, kann aber noch nicht überblicken, welches die richtige Anlaufstelle wäre. Ideal wäre natürlich, wenn die Daten hinterher “von alleine” in der Order landen - Ich dachte an das Feld Payload oder an das Feld custom_fields, aber auch da bin ich mir noch nicht sicher.

Das Feld PayLoad ist das richtige

1 „Gefällt mir“

     $lineItem->setPayloadValue(‚customData‘, $item[‚customData‘]);

1 „Gefällt mir“

Top, danke!

Falls jemand per Google hier landet:

Da kommt man am bequemsten per 

 class CartItemAddRouteDecorator extends AbstractCartItemAddRoute { funciton add(){...} } 

ran, den man noch in services.xml registriert mit

 [service id="ACME\MeinModul\Service\CartItemAddRouteDecorator" decorates="Shopware\Core\Checkout\Cart\SalesChannel\CartItemAddRoute"]     [argument type="service" id="ACME\MeinModul\Service\CartItemAddRouteDecorator.inner" /] [!-- Constructor-Parameter --]     [argument type="service" id="Shopware\Core\Checkout\Cart\CartCalculator"/]     [argument type="service" id="Shopware\Core\Checkout\Cart\CartPersister"/]     [argument type="service" id="event\_dispatcher"/]     [argument type="service" id="Shopware\Core\Checkout\Cart\LineItemFactoryRegistry"/] [/service] 

 

(Eckige durch spitze Klammern ersetzen)

Es gibt extra ein Event dafür https://github.com/shopware/platform/blob/master/src/Core/Checkout/Cart/Event/LineItemAddedEvent.php#L10

1 „Gefällt mir“

Hallo Euroxid,

versuche eigentlich dasselbe zu programmieren, also zusätzliche Custom LineItem, die der Kunde auswählen kann,

dem Warenkorb hinzuzufügen. Frage mich, welche die beste Lösung ist?

Mit dem LineItemAddedEvent kann ich nicht viel anfangen, da die ja für jede LineItem getrennt ausgelöst werden und ich

das eigentliche Produkt zusammen mit den Custom Eigenschaften in einer LineItemCollection dem Warenkorb hinzufügen will.

Das Plugin Custom Products von Shopware selbst macht es sich ja relativ einfach, die ersetzen einfach die eigentlich Route

in buy-widget-form.html.twig durch ihre eigene auf den eigenen Controller.

Kann ich natürlich auch machen, nur brauchen wir dieses Custom Products Plugin eigentlich auch für manche Produkte,

insofern beisst sich das leider wieder. Außerdem könnte sich dann auch wieder mit anderen Plugins beißen.

Insofern die Frage:

Hast Du dann wirklich den Decorator benutzt oder das LineItemAddedEvent, wenn ja wie?

Oder falls jemand einen Tip hat, welche die beste Lösung ist, bin ich sehr, sehr dankbar.

Danke und Gruß,

Werner.

Hallo!

Stehe vor der gleichen Herausforderung und möchte ein Eingabefeld auf der Produktdetailseite haben und dies dann als customData zum LineItem speichern.

Hat jemand eine gute Lösung gefunden?

Ich habe die Version von euroxid versucht, komme aber leider nicht weiter damit.

Danke und Grüße! 

Mit folgender Lösung bin ich weitergekommen: