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.