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.