Puncte:0

Setarea $order_item->setUnitPrice($price, TRUE);) oprește îmbinarea articolelor din coș, cum să preveniți acest lucru?

drapel cn

Drupal Commerce 2, cu Drupal 9.

În evenimentul CART_ENTITY_ADD, dacă am setat $order_item->setUnitPrice($price, TRUE); articolele identice adăugate în coș sunt adăugate ca articole de comandă noi, dar vreau să fie îmbinate.

Dacă comentez această linie din codul meu, articolele sunt îmbinate așa cum era de așteptat și cantitatea lor este însumată.

Cum stabilesc prețul unitar fără ca articolele de comandă să fie tratate ca articole de comandă distincte?

Codul relevant al evenimentului CART_ENTITY_ADD:

funcția publică addToCart(CartEntityAddEvent $event) {
    $order_item = $event->getOrderItem();
    // actualizați articolul de comandă
    $articol_comanda->setUnitPrice($pret, TRUE);
    $articol_comanda->salvare();
}
No Sssweat avatar
drapel ua
Lasă-mă să văd întreaga imagine. Puteți posta întregul cod care este rulat în evenimentul `CART_ENTITY_ADD`?
thiokol avatar
drapel cn
Hei @No Sssweat - Mi-am actualizat întrebarea cu codul complet. Nu cred că cea mai mare parte a codului este relevantă pentru problemă, ca atunci când elimin $order_item->setUnitPrice($price, TRUE); linie funcționează conform așteptărilor și articolele și cantitățile sunt îmbinate. Cred că Commerce OrderItemMatcher nu trebuie să dorească să îmbine articole când prețul unitar este setat astfel?
Puncte:0
drapel ua

Hmmmmmmm mai degrabă decât articol_comandă->salvare();, încercați să utilizați managerul de coș

// ia căruciorul
$cart_provider = \Drupal::service('commerce_cart.cart_provider');
$cart = $cart_provider->getCart('default');
// actualizați coșul
$cart_manager = \Drupal::service('commerce_cart.cart_manager');
$articol_comanda->setUnitPrice($pret, TRUE);
$cart_manager->updateOrderItem($cart, $order_item);

Primă: Unele metode/funcții s-ar putea să găsești util.

thiokol avatar
drapel cn
Multumesc pentru raspuns. De fapt, am ajuns să mut logica prețurilor într-un solutor de preț. Probabil că acolo ar trebui să aparțină oricum. Totul funcționează corect atunci când logica de preț este mutată din evenimentul CART_ENTITY_ADD și în soluția de preț.

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.