Como obter todos os itens no carrinho atualmente?

Respostas:

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

em $cartvocê tem toda a coleção de itens do carrinho e, se você deseja obter o ID do produto, nome que pode obter usando o loop foreach

Keyur Shah
fonte
6
funciona, mas exibe todos os produtos, incluindo os que pertencem a produtos configuráveis. Para exibir todos os produtos, exceto os que eu mencionei, você deve usar getAllVisibleItems ()
Attila Naghi
Como mostrar a quantidade desses itens?
Marcos Vinicius
Você deveria usar o getModel? Você não deveria estar usando getSingleton?
Danny Dev Nz
28

Encontrei outra solução. O código a seguir funciona para mim.

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
    $productId = $item->getProductId();     
    // Do something more
}
Sukeshini
fonte
Como mostrar a quantidade desses itens?
Marcos Vinicius
1
Por que 27 votos positivos para carregar produtos em um loop ....?
Sv3n
Isso tem um desempenho terrível. Você está carregando cada produto em um loop quando ele já está disponível via $item->getProduct()... Toda vez que você pensa em usar -> load () no magento, pode contar com um desempenho ruim, às vezes não há outro opção realmente, mas este não é o caso aqui ..
OZZIE
1
@ sv3n: Obrigado por apontar. Modificado o código
Sukeshini 13/0218
20

Existem vários métodos que funcionam de maneira diferente:

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

    Retorna uma coleção de itens de cotação com todos os itens associados à cotação atual.

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

    Este é um atalho para o método acima, mas se não houver aspas, ele retornará uma matriz vazia; portanto, você não pode confiar em obter uma instância de coleção.

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

    Carrega a coleção de itens e retorna uma matriz de todos os itens que não estão marcados como excluídos (ou seja, foram removidos na solicitação atual)

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

    Carrega a coleção de itens e, em seguida, retorna uma matriz de todos os itens que não estão marcados como excluídos E não têm um pai (ou seja, você obtém itens para produtos configuráveis ​​e em pacote configurável, mas não seus filhos associados). Cada item da matriz corresponde a uma linha exibida na página do carrinho.

Escolha o que melhor se adapta às suas necessidades. Na maioria dos casos, o último método é o que você precisa, mas infelizmente o Magento o fornece apenas como array e não como coleção.


Observe que Mage::getSingleton('checkout/cart')->getQuote()e Mage::getSingleton('checkout/session')->getQuote()são intercambiáveis.

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

melhor maneira de obter o item completo no carrinho

Rahul Singh
fonte
Use Mage :: getSingleton ('checkout / cart') -> getQuote () -> getAllItems ();
Aman Srivastava
Por quê? Qual é a diferença?
LM_Fielding 20/04/19
-7

O código abaixo é usado para obter itens do carrinho

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