Рейтинг:0

Обновить количество других позиций при обновлении позиции

флаг ke

Друпал 9, Друпал Коммерс 2.26 У меня есть подписчик событий, слушающий CartEvents.. в частности, CartEvents::CART_ORDER_ITEM_UPDATE

У меня есть продукты одного типа, которые ссылаются на продукты другого типа.

Цель состоит в том, чтобы когда пользователь обновляет элемент заказа для продукта типа «класс» в корзине, элемент заказа для соответствующего количества material_kit обновляется, чтобы соответствовать.

У меня есть подписчики на похожие события, которые позволяют мне создавать соответствующий элемент заказа, когда продукт добавляется в корзину, или когда элемент заказа удаляется, соответствующий элемент заказа также удаляется. Не работает только обновление количества для соответствия обновлений другому.

Событие срабатывает, как и ожидалось.Поток выполнения проходит через условные выражения, обновляет количество 2-го элемента строки, но обновленное количество никогда не отражается. Как будто этого никогда не было.

Я мог бы удалить и воссоздать новую позицию заказа для продукта, но предпочел бы этого не делать и хочу понять, что происходит.

Итак, как обновить количество другой позиции заказа, когда количество позиции заказа обновляется в корзине?

/**
   * Управление указанным количеством комплекта материалов при изменении количества продукта класса
   *
   * @param \Drupal\commerce_cart\Event\CartOrderItemUpdateEvent $event
   * Корзина событий.
   */
  публичная функция onCartOrderItemUpdate (CartOrderItemUpdateEvent $event) {
    $order_item = $event->getOrderItem();
    $product_variation = $order_item->getPurchasedEntity();
    $productType = $product_variation->get('type')[0]->get('target_id')->getValue();
    если ($ productType == 'класс') {
      $class_quantity = $order_item->getQuantity();
      $корзина = $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']) && пусто($payable_to_instructor[0]['value'])) {
        $material_kit_product = Product::load($material_kit_field_value[0]['target_id']);
        если (!пусто($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();
            если ($pt == 'material_kit') {
              если ($pv->id() == $material_kit_variation_id) {
                // поток выполнения попадает сюда, но обновленное количество не "прилипает"
                $oi->setQuantity($class_quantity);
                $this->cartManager->updateOrderItem($cart, $oi);
                // почему не работает обновление позиции заказа? ^^
              }
            }
          }
        }
      }
    }
  }

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

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