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?

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;
    }
........
}

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.


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);
}

?>

Adicione código no para todas as linhas <? Php?>
Bhagyavant
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.