Wie bekomme ich aktuell alle Artikel im Warenkorb?

45

Ich möchte eine Sammlung aller Artikel im Warenkorb erhalten.

Wie kann ich das machen ? Vorschläge werden geschätzt.

Sukeshini
quelle
Wenn Sie nach einer Lösung mit Magento 2 suchen, besuchen
Fabian Schmengler,

Antworten:

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

in $cartSie bekam die ganze Sammlung von Wagenposition und wenn Sie Produkt - ID erhalten möchten, nennen Sie verwenden foreach - Schleife bekommen

Keyur Shah
quelle
6
Es funktioniert, zeigt jedoch alle Produkte an, einschließlich der Produkte, die zu konfigurierbaren Produkten gehören. Um alle Produkte außer den genannten anzuzeigen, müssen Sie getAllVisibleItems ()
Attila Naghi
Wie wird die Menge dieses Artikels angezeigt?
Marcos Vinicius
Sollten Sie getModel verwenden? Sollten Sie nicht getSingleton verwenden?
Danny Dev Nz
28

Ich habe eine andere Lösung gefunden. Der folgende Code funktioniert für mich.

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
    $productId = $item->getProductId();     
    // Do something more
}
Sukeshini
quelle
Wie wird die Menge dieses Artikels angezeigt?
Marcos Vinicius
1
Warum 27 Upvotes für das Laden von Produkten in einer Schleife?
Sv3n
Dies hat eine schreckliche Leistung. Sie laden jedes Produkt in eine Schleife, wenn es bereits über $item->getProduct()... verfügbar ist. Jedes Mal, wenn Sie über die Verwendung von -> load () in Magento nachdenken, können Sie mit einer schlechten Leistung rechnen, manchmal gibt es keine andere Option wirklich, aber das ist hier nicht der Fall ..
Ozzie
1
@ sv3n: Danke für den Hinweis. Der Code wurde
geändert
20

Es gibt verschiedene Methoden, die auf unterschiedliche Weise funktionieren:

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

    Gibt eine Angebotseintragssammlung mit allen Einträgen zurück, die dem aktuellen Angebot zugeordnet sind.

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

    Dies ist eine Abkürzung für die obige Methode. Wenn jedoch kein Anführungszeichen vorhanden ist, wird ein leeres Array zurückgegeben, sodass Sie sich nicht darauf verlassen können, eine Auflistungsinstanz abzurufen.

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

    Lädt die Elementauflistung und gibt dann ein Array aller Elemente zurück, die nicht als gelöscht markiert sind (dh in der aktuellen Anforderung entfernt wurden).

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

    Lädt die Artikelsammlung und gibt dann ein Array aller Artikel zurück, die nicht als gelöscht markiert sind UND keine übergeordneten Artikel haben (dh Sie erhalten Artikel für gebündelte und konfigurierbare Produkte, aber nicht die zugehörigen untergeordneten Artikel). Jedes Array-Element entspricht einer angezeigten Zeile auf der Warenkorbseite.

Wählen Sie, was Ihren Bedürfnissen am besten entspricht. In den meisten Fällen ist die letzte Methode die, die Sie benötigen, aber leider bietet Magento sie nur als Array und nicht als Sammlung an.


Beachten Sie, dass Mage::getSingleton('checkout/cart')->getQuote()und Mage::getSingleton('checkout/session')->getQuote()austauschbar sind.

Fabian Schmengler
quelle
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 />";
}

beste Weg, um alle Artikel in den Warenkorb zu bekommen

Rahul Singh
quelle
Verwende Mage :: getSingleton ('checkout / cart') -> getQuote () -> getAllItems ();
Aman Srivastava
Warum? Was ist der Unterschied?
LM_Fielding
-7

Der folgende Code wird zum Abrufen von Warenkorbartikeln verwendet

$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
quelle