Korrekter Weg um Warenkorb-Position (LineItem) erweitern?

Hallo,

ich suche nach der saubersten Lösung, eine Warenkorb-Position um weitere Informationen anzureichern. Der Kunde kann auf der Produktdetailseite Angaben, diese Angaben soll dann in der Position gespeichert werden. In SW 5 haben wir das über s_order_basket_attributes gelöst.

Welches Vorgehen ist hier in SW 6 zu empfehlen?

Eine Möglichkeit wäre, ein CustomEntity zu erzegen und das dann mit der Position zu verknüpfen. Das fühlt sich aber etwas nach “auf Spatzen mit Kanonen schießen” an - oder ist das genau der richtige Weg? 

Danke.

Hey,

die LineItems haben ein payload Feld. Dort kannst du jedliche Daten drin speichern, die du brauchst.

1 Like

Aha! Danke. Was ist besser, das Payload-Feld zu nutzen oder ein Struct zu erstellen und dieses per addExtension einzufügen? Es geht um ein Objekt mit 4 Feldern.

Danke.

Payload, da diese für die Bestellung übernommen werden :wink:

1 Like

OK, danke. Sehe ich richtig, dass diese Daten aktuell im Backend in einer Position nicht angezeigt werden?

Nein werden sie nicht, dazu müsste man beispielsweise eine Extension schreiben. Da für die Line-Items kaum Platz ist, bietet sich an über das Dropdown ein Popup mit weiteren Details zu öffnen. Müsste man aber an der Stelle selbst basteln :stuck_out_tongue:

Danke, dann habe ich das richtig verstanden. Aber das ist doch eigentlich ein Rückschritt zu SW5? Dort gab es Freitextfeld für jedes erdenkliche Entity.

Es gibt bei vielen Entitäten CustomFields die sind vergleichbar mit dem Freitextfeld. Da der Warenkorb etwas anders läuft als die anderen Entitäten

ich hab auch versucht das Payload zu erweitern.

eigener Service mit Event 

class CheckoutCartPage implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            CheckoutCartPageLoadedEvent::class => "onCheckoutPageLoaded"
        ];
    }

    public function onCheckoutPageLoaded(CheckoutCartPageLoadedEvent $event): void
    {
        var_dump($event->getPage()->getCart()->getLineItems()->getPayload());
    }
}

allerdings kann ich in dieser Funktion nichts machen, da immer im Frontend ein Fehler angezeigt wird, wenn ich den Warenkorb aufrufe

Failed to start the session because headers have already been sent

was mach ich falsch?

Irgendwo ein Leerzeichen vor `