Ich versuche, ein zu schreiben Plugin zum Hinzufügen eines Produkts zu einem Warenkorb, wenn es sich noch nicht darin befindet, z. B. um es immer in einem Warenkorb zu haben (eine Gebühr für Paypal, kostet nichts, wenn die BillingMethod nicht Paypal ist und andernfalls die Paypal-Gebühr).
Ich habe einen Abonnenten, der AfterLineItemAddedEvent erfolgreich abhört und darauf auslöst Veranstaltung, also keine Probleme da. Das ist mein Code:
Code: Select all
public function onItemAdded(AfterLineItemAddedEvent $event) {
//$cart = $event->getCart();
$cart = $this->cartservice->getCart($event->getCart()->getToken(), $event->getSalesChannelContext());
if ($cart->getLineItems()->filter(function (LineItem $item) {
if ($item->getPayload()['productNumber'] === "PP")
return $item;
})->count() !== 0)
return;
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('productNumber', 'PP'));
$product = $this->productRepository->search($criteria, $event->getContext())->first();
$paypalFeeLineItem = (new LineItem('paypalfee', LineItem::PRODUCT_LINE_ITEM_TYPE, $product->getId(), 1))
->setRemovable(false)
->setStackable(false);
//$cart->add($paypalFeeLineItem);
//$this->persister->save($cart, $event->getSalesChannelContext());
$this->cartservice->add($cart, $paypalFeeLineItem, $event->getSalesChannelContext());
}
-> Ich denke, das bedeutet, dass mein Problem entweder darin besteht, dass das LineItem vorhanden ist nicht korrekt hinzugefügt, oder dass es so ist falsch gebaut.
Also, wie würde ich das richtig machen?