Cart Payload erweitern

Hallo,

wenn ich mich an das Event LineItemAddedEvent::class => ‚onLineItemAdded‘ einhänge, möchte ich ein custom field im Warenkorb ausgeben.

Dies habe ich bis jetzt so gelöst:

public function onLineItemAdded(LineItemAddedEvent $event)
    {
        $myCart = $event->getCart();
        $myLineItems = $myCart->getLineItems();

        foreach ($myLineItems as $key => $item) {
            
            if ($product_id == $key && $item->hasPayloadValue('test1') == false) {
                $lineItem->setPayloadValue('test1', 'test1');
            }
        }
    }

Leider wird die Variable „test1“ aber nicht in der offcanvas-cart.html.twig ausgegeben.

Weiß jemand Rat?

Hi,

ich habe selbiges Unterfangen wie folgt gelöst

/**
     * @return array
     */
    public static function getSubscribedEvents(): array
    {
        return[
            LineItemAddedEvent::class => 'onLineItemAdded',
        ];
    }

    /**
     * @param LineItemAddedEvent $event
     * @throws \Shopware\Core\Checkout\Cart\Exception\InvalidPayloadException
     */
    public function onLineItemAdded(LineItemAddedEvent $event): void
    {
        $lineItem = $event->getLineItem();
        /** @var ProductEntity $product */
        foreach ($this->requestStack->getCurrentRequest()->get('lineItems') as $key => $item) {
            if ($lineItem->getId() == $key) {
                $lineItem->setPayloadValue('test', 'test1');
            }
        }
    }
}

Ich schätze mal durch $myLineItems = $myCart->getLineItems(); arbeitest Du nur noch auf einer Kopie und veränderst nicht die tatsächliche LineItemCollection in der Cart. Sprich Dir fehlt der Setter um Deine bearbeitete Collection der Cart wieder zuzuweisen.

1 Like