Come ottenere tutti gli articoli nel carrello attualmente?


Risposte:


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

in $carthai tutta la collezione di articoli del carrello e se vuoi ottenere l'ID del prodotto, il nome che puoi ottenere usando foreach loop


6
funziona ma visualizza tutti i prodotti inclusi quelli appartenenti a prodotti configurabili. Per visualizzare tutti i prodotti ad eccezione di quelli che ho menzionato, devi usare getAllVisibleItems ()
Attila Naghi,

Come mostrare la quantità di questi articoli?
Marcos Vinicius,

Dovresti usare getModel? Non dovresti usare getSingleton?
Danny Dev Nz,

28

Ho trovato un'altra soluzione. Il seguente codice funziona per me.

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

Come mostrare la quantità di questi articoli?
Marcos Vinicius,

1
Perché 27 voti positivi per il caricamento di prodotti in un ciclo ....?
sv3n

Questo ha prestazioni terribili .. stai caricando ogni prodotto in un ciclo quando sono già disponibili tramite $item->getProduct()... Ogni volta che pensi di usare -> load () in magento puoi contare su cattive prestazioni, a volte non ce ne sono altre opzione davvero ma questo non è il caso qui ..
OZZIE

1
@ sv3n: grazie per averlo sottolineato. Modificato il codice
Sukeshini,

21

Esistono diversi metodi che funzionano in modo diverso:

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

    Restituisce una raccolta di articoli di preventivo con tutti gli articoli associati al preventivo corrente.

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

    Questa è una scorciatoia per il metodo sopra, ma se non è presente alcuna citazione restituisce un array vuoto, quindi non puoi fare affidamento su come ottenere un'istanza di raccolta.

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

    Carica la raccolta di articoli, quindi restituisce un array di tutti gli elementi che non sono contrassegnati come eliminati (ovvero sono stati rimossi nella richiesta corrente)

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

    Carica la raccolta di articoli, quindi restituisce un array di tutti gli articoli che non sono contrassegnati come eliminati E non hanno un genitore (ovvero si ottengono articoli per prodotti in bundle e configurabili ma non i loro figli associati). Ogni articolo dell'array corrisponde a una riga visualizzata nella pagina del carrello.

Scegli ciò che si adatta meglio alle tue esigenze. Nella maggior parte dei casi l'ultimo metodo è quello di cui hai bisogno, ma sfortunatamente Magento lo fornisce solo come array e non come collezione.


Si noti che Mage::getSingleton('checkout/cart')->getQuote()e Mage::getSingleton('checkout/session')->getQuote()sono intercambiabili.


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

modo migliore per ottenere tutto l'articolo nel carrello


Usa Mage :: getSingleton ('checkout / cart') -> getQuote () -> getAllItems ();
Aman Srivastava,

Perché? Qual è la differenza?
LM_Fielding

-7

Il codice seguente viene utilizzato per ottenere gli articoli del carrello

$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()) {

   }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.