Я пытаюсь написать Плагин для добавления продукта в корзину, если его там еще нет, например. чтобы всегда иметь его в корзине (плата за Paypal, ничего не стоит, если метод выставления счетов не является Paypal, а в противном случае - комиссия Paypal).
У меня есть подписчик, прослушивающий событие AfterLineItemAddedEvent, успешно сработавшее на этом событие, так что никаких проблем нет. Это мой код:
Код: Выделить всё
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());
}
-> Я думаю, это означает, что моя проблема либо в том, что LineItem добавлено не правильно, или что он построен неправильно.
Итак, как мне сделать это правильно?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -to-a-cart