Obter itens de cotação (carrinho) programaticamente mostra SKUs duplicados para o produto simples e configurável

10

Estou recebendo o carrinho de compras usando:

$cart = Mage::getSingleton('checkout/session')->getQuote();

E então iterando através dele usando:

foreach ($cart->getAllItems() as $item) { }

Mas parece estar retornando itens duplicados com os mesmos SKUs, mas com IDs de produtos diferentes! No site principal, quando abro o carrinho, ele mostra o único produto.

cart: {
    id: 680,
    items: [
        {
            name: "Tori Tank",
            price: "60.0000",
            id: "418",
            sku: "wbk004"
        },
        {
            name: "Tori Tank",
            price: "60.0000",
            id: "286",
            sku: "wbk004"
        }
    ]
}

Minha pergunta é .. Por que isso está acontecendo? O produto pai (configurável) não deveria mostrar seu próprio Sku exclusivo?

Além disso, se eu quiser adicionar um produto ao carrinho, devo adicionar o produto configurável? Ou adiciono o produto simples e o Magento lida com o resto?

Pat
fonte

Respostas:

10

Segundo o Magento, quando um produto configurável é adicionado ao carrinho, duas linhas são inseridas no banco de dados. um carrinho de produto configurável outro é um produto simples

  • One row has configurable id and simple product SKU and parent item id is null
  • Other rows have simple id and simple product SKU and parent item id should above row id

Como você usar getAllItems(), em seguida, em loop for que você precisa checké que tem parent item $item->getParentItemId().

foreach ($cart->getAllItems() as $item) {
    / * add this */
    if ($item->getParentItemId()) {
        continue;
    }
........
}
Amit Bera
fonte
Você também pode usar o código Marius para fins de visibilidade do usuário
Amit Bera
Porém, há um problema .. Não consigo obter a cor, tamanho, etc. Quando uso o getAllVisibleItems (). Como devo fazer isso?
Pat
sim, é possível usando o modelo de produto da Sku, porque a sku é a mesma para duas linhas.
Amit Bera
10

Use em $cart->getAllVisibleItems()vez de $cart->getAllItems().
Você recebe duplicatas porque, ao adicionar um produto configurável ao carrinho, o magento adiciona 2 produtos, o produto simples e o produto configurável, mas apenas um é visível para o usuário.

Marius
fonte
Se eu adicionar um produto simples, ele adicionará automaticamente o configurável também? Ou preciso fazer isso manualmente?
Pat
Não. Quando você adiciona um produto configurável, haverá 2 no carrinho.
Marius
1
<?php
$cart = Mage::getModel('checkout/cart')->getQuote();

foreach ($cart->getAllVisibleItems() as $item) 
{ 
  echo $productName = $item->getProduct()->getName();
  echo $productPrice = $item->getProduct()->getPrice();
  echo $grandTotal = Mage::getModel('checkout/session')->getQuote()->getGrandTotal();
  echo $this->helper('catalog/image')->init($item->getProduct(), 'small_image')->resize(50,50);
}

?>
Bhagyavant
fonte
Adicione código no para todas as linhas <? Php?>
Bhagyavant