Puncte:1

Evenimente de ștergere a comenzii comerciale și de ștergere a articolului de comandă

drapel cn

Întrebare rapidă, sper că cineva poate răspunde cu ușurință.

Există două evenimente de comandă pentru ștergerea comenzii enumerate aici: https://github.com/drupalcommerce/commerce/blob/8.x-2.x/modules/order/src/Event/OrderEvents.php

commerce_order.commerce_order.delete

și

commerce_order.commerce_order_item.delete

Vreau să șterg unele entități asociate atunci când o linie de comandă este ștearsă, astfel încât să mă pot conecta la commerce_order.commerce_order_item.delete, dar întrebarea mea este dacă o comandă întreagă este ștearsă, acest eveniment va fi declanșat și pentru fiecare linie individuală sau am nevoie să îmi repet codul și pentru commerce_order.commerce_order.delete și să parcurg fiecare rând din comandă?

No Sssweat avatar
drapel ua
Ei bine... există o modalitate de a afla, te gândești la ce mă gândesc eu?
Puncte:2
drapel cn

dacă o comandă întreagă este ștearsă, acest eveniment va fi declanșat și pentru fiecare linie individuală

Da, va fi - entitatea de comandă comercială are un postDelete metodă care parcurge articolele din comandă și le șterge unul câte unul

funcția publică statică postDelete(EntityStorageInterface $storage, array $entities) {
  parent::postDelete($stocare, $entities);

  // Șterge articolele de comandă dintr-o comandă ștearsă.
  $articole_comanda = [];
  /** @var \Drupal\commerce_order\Entity\OrderInterface $entity */
  foreach ($entities ca $entity) {
    foreach ($entity->getItems() ca $order_item) {
      $articole_comanda[$articol_comanda->id()] = $articol_comanda;
    }
  }
  /** @var \Drupal\commerce_order\OrderItemStorageInterface $order_item_storage */
  $order_item_storage = \Drupal::service('entity_type.manager')->getStorage('commerce_order_item');
  $storage_articole_comanda->stergere($articole_comanda);
}

Ștergerea articolului de comandă va invoca evenimentul la care vă abonați, deci nu este nevoie să faceți altceva.

thiokol avatar
drapel cn
Perfect, multumesc mult.
thiokol avatar
drapel cn
Toate acestea funcționează, dar am o altă problemă, nu am spus că commerce_order.commerce_order_item.delete este declanșat nu doar atunci când o linie de comandă este ștearsă, ci și atunci când un articol este pur și simplu eliminat din coș. Există vreo distincție între ștergerea unei linii dintr-o comandă finalizată și eliminarea unui articol din coș, în ceea ce privește un eveniment abonat? Există un alt eveniment pe care ar trebui să-l folosesc în schimb?

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.