Jak obecnie zdobyć wszystkie produkty w koszyku?


Odpowiedzi:


61
$cart = Mage::getModel('checkout/cart')->getQuote();
foreach ($cart->getAllItems() as $item) {
    $productName = $item->getProduct()->getName();
    $productPrice = $item->getProduct()->getPrice();
}

w $cartmasz wszystko kolekcję koszyka pozycji i jeśli chcesz uzyskać identyfikator produktu, wymienić można uzyskać z użyciem pętli foreach


6
działa, ale wyświetla wszystkie produkty, w tym produkty należące do produktów konfigurowalnych. Aby wyświetlić wszystkie produkty oprócz tych, o których wspomniałem, musisz użyć getAllVisibleItems ()
— Attila Naghi

Jak pokazać ilość tego produktu?
— Marcos Vinicius

Czy powinieneś używać getModel? Nie powinieneś używać getSingleton?
— Danny Dev Nz

28

Znalazłem inne rozwiązanie. Poniższy kod działa dla mnie.

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
    $productId = $item->getProductId();     
    // Do something more
}

Jak pokazać ilość tego produktu?
— Marcos Vinicius

1
Dlaczego 27 głosów pozytywnych za ładowanie produktów w pętli ....?
— sv3n

Ma to okropną wydajność ... ładujesz każdy produkt w pętli, gdy jest już dostępny przez $item->getProduct()... Za każdym razem, gdy myślisz o użyciu -> load () w magento, możesz liczyć na niską wydajność, czasami nie ma innych opcja naprawdę, ale tutaj tak nie jest ..
— OZZIE

1
@ sv3n: Dziękujemy za zwrócenie na to uwagi. Zmodyfikowano kod
— Sukeshini,

20

Istnieje kilka metod, które działają w inny sposób:

  1. $items = Mage::getSingleton('checkout/cart')->getQuote()->getItemsCollection();

    Zwraca kolekcję pozycji wyceny ze wszystkimi pozycjami powiązanymi z bieżącą wyceną.

  2. $items = Mage::getSingleton('checkout/cart')->getItems();

    Jest to skrót do powyższej metody, ale jeśli nie ma cudzysłowu, zwraca pustą tablicę, więc nie można polegać na uzyskaniu instancji kolekcji.

  3. $items = Mage::getSingleton('checkout/cart')->getQuote()->getAllItems();

    Ładuje kolekcję elementów, a następnie zwraca tablicę wszystkich elementów, które nie są oznaczone jako usunięte (tj. Zostały usunięte w bieżącym żądaniu)

  4. $items = Mage::getSingleton('checkout/cart')->getQuote()->getAllVisibleItems();

    Wczytuje kolekcję elementów, a następnie zwraca tablicę wszystkich elementów, które nie są oznaczone jako usunięte ORAZ nie mają elementu nadrzędnego (tzn. Otrzymujesz elementy dla produktów w pakiecie i konfigurowalnych, ale nie powiązane z nimi elementy podrzędne). Każdy element tablicy odpowiada wyświetlanemu wierszowi na stronie koszyka.

Wybierz to, co najlepiej odpowiada Twoim potrzebom. W większości przypadków potrzebna jest ostatnia metoda, ale niestety Magento zapewnia ją tylko jako tablicę, a nie jako kolekcję.


Zauważ, że Mage::getSingleton('checkout/cart')->getQuote()i Mage::getSingleton('checkout/session')->getQuote()są wymienne.


1
$items =Mage::getSingleton('checkout/session')->getQuote()->getAllItems();

foreach($items as $item) {
    echo 'ID: '.$item->getProductId().'<br />';
    echo 'Name: '.$item->getName().'<br />';
    echo 'Sku: '.$item->getSku().'<br />';
    echo 'Quantity: '.$item->getQty().'<br />';
    echo 'Price: '.$item->getPrice().'<br />';
    echo "<br />";
}

najlepszy sposób, aby dostać wszystkie produkty do koszyka


Użyj Mage :: getSingleton ('checkout / cart') -> getQuote () -> getAllItems ();
— Aman Srivastava

Dlaczego? Co za różnica?
— LM_Fielding 20.04.17

-7

Poniższy kod służy do pobierania przedmiotów z koszyka

$cart = new Mage_Checkout_Model_Cart();

$cart->init();

foreach ($cart->getItems() as $item) {

   // we can wrap our request in this IF statement

   if (!$item->getParentItemId()) {

   }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.