Comment obtenir tous les articles dans le panier actuellement?

45

Je souhaite obtenir une collection de tous les articles du panier actuellement.

Comment puis-je faire ceci ? Toute suggestion sera appréciée.

Sukeshini
la source
Si vous cherchez une solution avec Magento 2, rendez
Fabian Schmengler le

Réponses:

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

en $cartvous avez toute la collection de l'article de panier et si vous voulez obtenir l'ID du produit, nom que vous pouvez obtenir en utilisant foreach loop

Keyur Shah
la source
6
cela fonctionne mais il affiche tous les produits, y compris ceux qui appartiennent à des produits configurables. Pour afficher tous les produits, à l'exception de ceux que j'ai mentionnés, vous devez utiliser getAllVisibleItems ()
Attila Naghi
Comment afficher la quantité de ces articles?
Marcos Vinicius
Devez-vous utiliser getModel? Ne devriez-vous pas utiliser getSingleton?
Danny Dev Nz
28

J'ai trouvé une autre solution. Le code suivant fonctionne pour moi.

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
    $productId = $item->getProductId();     
    // Do something more
}
Sukeshini
la source
Comment afficher la quantité de ces articles?
Marcos Vinicius
1
Pourquoi 27 votes positifs pour le chargement de produits en boucle?
sv3n
Cela a de très mauvaises performances .. vous chargez chaque produit dans une boucle alors qu’ils sont déjà disponibles via $item->getProduct()... Chaque fois que vous pensez utiliser -> load () dans magento, vous pouvez compter sur les mauvaises performances. Parfois, il n’y en a pas d’autre. option vraiment mais ce n'est pas le cas ici ..
OZZIE
1
@ sv3n: Merci de l'avoir signalé. Modification du code
Sukeshini le
21

Il existe plusieurs méthodes qui fonctionnent de manière différente:

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

    Renvoie une collection d' éléments de devis avec tous les éléments associés au devis en cours.

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

    Ceci est un raccourci pour la méthode ci-dessus, mais s'il n'y a pas de citation, il retourne un tableau vide. Vous ne pouvez donc pas vous fier à l'obtention d'une instance de collection.

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

    Charge la collection d'éléments, puis renvoie un tableau de tous les éléments qui ne sont pas marqués comme supprimés (c'est-à-dire qui ont été supprimés dans la demande en cours).

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

    Charge la collection d'éléments, puis renvoie un tableau de tous les éléments qui ne sont pas marqués comme supprimés ET qui n'ont pas de parent (c'est-à-dire que vous obtenez des éléments pour les produits regroupés et configurables, mais pas leurs enfants associés). Chaque élément du tableau correspond à une ligne affichée dans la page du panier.

Choisissez ce qui correspond le mieux à vos besoins. Dans la plupart des cas, la dernière méthode correspond à vos besoins, mais malheureusement, Magento ne la fournit que sous forme de tableau et non de collection.


Notez que Mage::getSingleton('checkout/cart')->getQuote()et Mage::getSingleton('checkout/session')->getQuote()sont interchangeables.

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

meilleur moyen d'obtenir le tout dans le panier

Rahul Singh
la source
Utilisez Mage :: getSingleton ('checkout / cart') -> getQuote () -> getAllItems ();
Aman Srivastava
Pourquoi? Quelle est la différence?
LM_Fielding
-7

Le code ci-dessous est utilisé pour obtenir des articles de panier

$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
la source