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.