Hogyan számolhatom meg programszerűen a kosárban lévő termékek számát?
On január 1, 2021 by adminLétrehoztam az egyéni blokkot, itt szeretném megszámolni a kosárban bemutatott és a függvény a felhasználó által kiválasztott termékek megszerzéséhez.
Van más módszer a kosárban lévő termékek számának megszámolására?
Kérem, segítsen nekem, hogyan érhetem el ezt!
Válasz
Ha ismeri a bolt azonosítóját és a megrendelés típusát, akkor megszámolhatja az aktuális felhasználó termékeinek számát kosár a következő kóddal.
$store_id = 1; $order_type = "default"; $cart_manager = \Drupal::service("commerce_cart.cart_manager"); $cart_provider = \Drupal::service("commerce_cart.cart_provider"); $entity_manager = \Drupal::entityManager(); $store = $entity_manager->getStorage("commerce_store")->load($store_id); $cart = $cart_provider->getCart($order_type, $store); $total_items = count($cart-> getItems());
Válasz
A Drupal 8-ban szekerek speciális megrendelések, amelyek egy felhasználóhoz kapcsolódnak (például a szokásos megrendelések). Egy egyéni modulban lehívhatja a bejelentkezett felhasználói megrendeléseket, szűrheti őket egy kényelmes logikai mezővel, amelyet “kosárnak” nevezhet, és az utolsó kosár megszerzéséhez létrehozási dátum szerint rendezheti őket. ennek a felhasználónak. Ezután megkaphatja a kosárrendelés tételszámát:
in mymodule.module : use Drupal\commerce_order\Entity\Order; function mymodule_preprocess_[page|block|something_else](&$variables) { // get orders... $query = \Drupal::entityQuery("commerce_order") // ...for logged in user, could be anonymous (uid = 0) ->condition("uid",\Drupal::currentUser()->id()) // ...which are carts ->condition("cart", 1) // ...last created first ->sort("created", "DESC") // ...get only one ->range(0,1); // execute this : you get an array of a unique order ids (last cart) $cartsOrders = $query->execute(); // I found one : this user has a cart if(count($cartsOrders) > 0) { // load the order which is the last cart for logged in user /* @var Order $lastCart */ $lastCart = current(Order::loadMultiple($cartsOrders)); // send this order items count to the template // ({{ cartItemsCount }} in your twig) $variables["cartItemsCount"] = count($lastCart->getItems()); } }
Ez nem optimális vagy u gly code, ez csak egy kiinduló pont (de gyorsan tesztelhető, úgy tűnik, hogy működik). Ezt is tesztelni kell ritka esetekben vagy furcsa helyzetekben (például névtelen felhasználók bevonásával). A stratégiám (az utolsó létrehozott kosárrendelés megragadása) is téves lehet … Örülnék, ha erről visszajeleznénk egy szakembert.
SZERKESZTÉS
Több időt töltöttem erre, és néhány dolgot ki kellett derítenem, íme néhány javítás (több Drupal Commerce 2 mód):
/* @var CurrentStoreInterface $cs */ $cs = \Drupal::service("commerce_store.current_store"); /* @var CartProviderInterface $cpi */ $cpi = \Drupal::service("commerce_cart.cart_provider"); $cart = $cpi->getCart("default", $cs->getStore()); $nbItemsInCart = $cart ? count($cart->getItems()) : 0;
Válasz
Biztos, hogy ez a Drupal 8 és nem a Drupal 7? Ez a függvény a commerce_cart.module Drupal 7 verziójából származik. Ebben az esetben megteheti, hogy mit tesz a kód a “Bevásárlókosár (# tétel)” kód visszahívásában, hogy megszámolja a kosárban lévő tételek számát:
// Count the number of product line items on the order. $wrapper = entity_metadata_wrapper("commerce_order", $order); $quantity = commerce_line_items_quantity($wrapper->commerce_line_items, commerce_product_line_item_types());
A teljesítőképesség érdekében a dev verzióban hozzáadtunk egy cart_line_items_quantity_by_id () függvényt (fel kell venni a Commerce 1.14-be), amely elkerüli a burkoló használatát. Először azonban magának kell átalakítania a $ order-> commerce_line_items mezőértéket a sorazonosítók tömbjévé.
Megjegyzések
- Igen , drupal 8-at kérek. Válasza működik a drupal 8-ban?
- Megpróbálom egy blokkban megjeleníteni a termékek számát. A fenti kódot használtam, PHP-hez hasonlóan végzetes hiba: Hívás undefined függvény Drupal \\ custom_hgsi_common \\ Plugin \\ Block \\ commerce_cart_order_load (). Nem tudom, mit tegyek. Kérem, vezessen!
- Igen, ez a függvény nem ' nem létezik; úgy tűnt, hogy a Drupal 7-ről beszélt, a Drupal 7 funkció megemlítése alapján. Ugyanez a kód nem fog működni a Drupal 8 esetében.
Vélemény, hozzászólás?