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


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
}

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.


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


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

   }
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.