Drupal 9, Thương mại Drupal 2.26
Tôi có một người đăng ký sự kiện, đang nghe CartEvents .. cụ thể là CartEvents::CART_ORDER_ITEM_UPDATE
Tôi có sản phẩm thuộc loại này tham khảo sản phẩm thuộc loại khác.
Mục tiêu là khi người dùng cập nhật mặt hàng đặt hàng cho sản phẩm thuộc loại 'loại' trong giỏ hàng, mặt hàng đặt hàng cho số lượng material_kit phù hợp sẽ được cập nhật để khớp.
Tôi có những người đăng ký sự kiện tương tự, cho phép tôi tạo một mục đặt hàng phù hợp khi một sản phẩm được thêm vào giỏ hàng hoặc khi một mục đặt hàng bị xóa, mục đặt hàng phù hợp cũng bị xóa. Chỉ cập nhật số lượng để khớp với các bản cập nhật khác không hoạt động.
Sự kiện cháy như mong đợi.Luồng thực thi đi qua các điều kiện, cập nhật số lượng của mục hàng thứ 2, nhưng số lượng đã cập nhật không bao giờ được phản ánh. Nó giống như nó không bao giờ xảy ra.
Tôi có thể xóa và tạo lại một mặt hàng đặt hàng mới cho sản phẩm, nhưng tôi không muốn làm như vậy và muốn hiểu điều gì đang xảy ra.
Vậy làm thế nào để cập nhật số lượng của một mặt hàng đặt hàng khác, khi số lượng mặt hàng đặt hàng được cập nhật trong giỏ hàng?
/**
* Quản lý số lượng bộ tài liệu tham khảo khi thay đổi số lượng sản phẩm của lớp
*
* @param \Drupal\commerce_cart\Event\CartOrderItemUpdateEvent $event
* Sự kiện giỏ hàng.
*/
chức năng công khai onCartOrderItemUpdate(CartOrderItemUpdateEvent $event) {
$order_item = $event->getOrderItem();
$product_variation = $order_item->getPurchasedEntity();
$productType = $product_variation->get('type')[0]->get('target_id')->getValue();
nếu ($productType == 'class') {
$class_quantity = $order_item->getQuantity();
$cart = $event->getCart();
$product = $product_variation->getProduct();
$material_kit_field_value = $product->get('field_material_fees')->getValue();
if (!empty($material_kit_field_value[0]['target_id']) && empty($payable_to_instructor[0]['value'])) {
$material_kit_product = Sản phẩm::load($material_kit_field_value[0]['target_id']);
if (!empty($material_kit_product)) {
$material_kit_variations = $material_kit_product->getVariations();
$material_kit_variation_id = $material_kit_variations[0]->id();
foreach ($cart->getItems() as $key => $oi) {
$pv = $oi->getPurchasedEntity();
$pt = $pv->get('type')[0]->get('target_id')->getValue();
if ($pt == 'material_kit') {
if ($pv->id() == $material_kit_variation_id) {
// luồng thực thi đến đây, nhưng số lượng cập nhật không "dính"
$oi->setQuantity($class_quantity);
$this->cartManager->updateOrderItem($cart, $oi);
// tại sao cập nhật mục đơn hàng không hoạt động? ^^
}
}
}
}
}
}
}