Рейтинг:0

Установка $order_item->setUnitPrice($price, TRUE);) останавливает объединение элементов корзины, как предотвратить это?

флаг cn

Drupal Commerce 2 с Drupal 9.

В событии CART_ENTITY_ADD, если я устанавливаю $order_item->setUnitPrice($price, TRUE); идентичные элементы, добавленные в корзину, добавляются как новые элементы заказа, но я хочу, чтобы они были объединены.

Если я закомментирую эту строку в своем коде, элементы будут объединены, как и ожидалось, и их количество будет суммировано.

Как установить цену за единицу, чтобы позиции заказа не рассматривались как отдельные позиции заказа?

Соответствующий код события CART_ENTITY_ADD:

общедоступная функция addToCart (CartEntityAddEvent $event) {
    $order_item = $event->getOrderItem();
    // обновить элемент заказа
    $order_item->setUnitPrice($price, TRUE);
    $order_item->сохранить();
}
No Sssweat avatar
флаг ua
Позвольте мне увидеть всю картину. Можете ли вы опубликовать весь код, который запускается в событии CART_ENTITY_ADD?
thiokol avatar
флаг cn
Привет @No Sssweat - я обновил свой вопрос, указав полный код. Я не думаю, что большая часть кода имеет отношение к проблеме, например, когда я удаляю $order_item->setUnitPrice($price, TRUE); строка работает так, как ожидалось, и элементы и количества объединяются. Я думаю, что Commerce OrderItemMatcher не должен объединять элементы, когда цена за единицу установлена ​​​​таким образом?
Рейтинг:0
флаг ua

Хмммммм, а не order_item->сохранить();, попробуйте использовать менеджер корзины

// получаем корзину
$cart_provider = \Drupal::service('commerce_cart.cart_provider');
$cart = $cart_provider->getCart('по умолчанию');
// обновить корзину
$cart_manager = \Drupal::service('commerce_cart.cart_manager');
$order_item->setUnitPrice($price, TRUE);
$cart_manager->updateOrderItem($cart, $order_item);

Бонус: Некоторые методы/функции вы можете найти полезным.

thiokol avatar
флаг cn
Спасибо за ответ. Вместо этого я фактически переместил логику ценообразования в преобразователь цен. Это, вероятно, где он должен быть в любом случае. Все работает правильно, когда логика ценообразования перемещается из события CART_ENTITY_ADD в преобразователь цен.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.