Puncte:0

Actualizați o altă cantitate de elemente rând atunci când elementul rând este actualizat

drapel ke

Drupal 9, Drupal Commerce 2.26 Am un abonat la eveniment, care ascult CartEvents .. în special CartEvents::CART_ORDER_ITEM_UPDATE

Am produse de un tip care fac referire la produse de alt tip.

Scopul este când utilizatorul actualizează articolul de comandă pentru produsul de tip „clasă” din coș, articolul de comandă pentru cantitatea material_kit potrivită este actualizat pentru a se potrivi.

Am abonați la evenimente similare, care îmi permit să creez un articol de comandă potrivit atunci când un produs este adăugat în coș sau când un articol de comandă este eliminat, articolul de comandă potrivit este, de asemenea, șters. Nu funcționează doar actualizarea cantității pentru a potrivi actualizările cu alta.

Evenimentul se declanșează conform așteptărilor.Fluxul de execuție trece prin condiționale, actualizează cantitatea celui de-al doilea articol rând, dar cantitatea actualizată nu este niciodată reflectată. E ca și cum nu s-ar fi întâmplat niciodată.

Aș putea elimina și recrea un nou articol de comandă pentru produs, dar aș prefera să nu o fac și vreau să înțeleg ce se întâmplă.

Deci, cum să actualizezi cantitatea unui alt articol de comandă, atunci când cantitatea unui articol de comandă este actualizată în coș?

/**
   * Gestionați cantitatea de kit de materiale de referință la schimbarea cantității de produs de clasă
   *
   * @param \Drupal\commerce_cart\Event\CartOrderItemUpdateEvent $event
   * Evenimentul cărucior.
   */
  funcția publică onCartOrderItemUpdate(CartOrderItemUpdateEvent $event) {
    $order_item = $event->getOrderItem();
    $variatie_produs = $articol_comanda->getPurchasedEntity();
    $productType = $product_variation->get('tip')[0]->get('target_id')->getValue();
    if ($productType == 'clasa') {
      $class_cantity = $comanda_articol->getQuantity();
      $cart = $event->getCart();
      $produs = $variație_produs->getProduct();
      $material_kit_field_value = $produs->get('field_material_fees')->getValue();
      dacă (!empty($material_kit_field_value[0]['target_id']) && empty($payable_to_instructor[0]['value'])) {
        $material_kit_product = Product::load($material_kit_field_value[0]['target_id']);
        dacă (!gol ($material_kit_product)) {
          $material_kit_variations = $material_kit_product->getVariations();
          $material_kit_variation_id = $material_kit_variations[0]->id();
          foreach ($cart->getItems() ca $key => $oi) {
            $pv = $oi->getPurchasedEntity();
            $pt = $pv->get('type')[0]->get('target_id')->getValue();
            dacă ($pt == 'kit_material') {
              if ($pv->id() == $material_kit_variation_id) {
                // fluxul de execuție ajunge aici, dar cantitatea actualizată nu se „lipește”
                $oi->setQuantity($clasa_cantitate);
                $this->cartManager->updateOrderItem($cart, $oi);
                // de ce nu funcționează actualizarea articolului de comandă? ^^
              }
            }
          }
        }
      }
    }
  }

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.