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

Keyur Shah
źródło
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
}
Sukeshini
źródło
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.

Fabian Schmengler
źródło
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

Rahul Singh
źródło
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()) {

   }
}
Abhishek Gupta
źródło