Obtener artículos de cotización (carrito) muestra programáticamente SKU duplicados para el producto configurable y simple

10

Recibo el carrito de compras usando:

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

Y luego iterando a través de él usando:

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

¡Pero parece que está devolviendo artículos duplicados con los mismos códigos de artículo, pero diferentes identificadores de producto! En el sitio principal, cuando abro el carrito, sin embargo, muestra el producto individual.

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

Mi pregunta es ... ¿Por qué está pasando esto? ¿No debería el producto principal (configurable) mostrar su propio Sku único?

Además, si deseo agregar un producto al carrito, ¿debo agregar el producto configurable? ¿O agrego el producto simple y Magento se encarga del resto?

Palmadita
fuente

Respuestas:

10

Según Magento, cuando se agrega un producto configurable en el carrito, se insertan dos filas en la base de datos. un carrito de producto configurable otro es un producto simple

  • 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 lo has usado, getAllItems()entonces for for loop lo que necesitas checkes si tiene parent item $item->getParentItemId().

foreach ($cart->getAllItems() as $item) {
    / * add this */
    if ($item->getParentItemId()) {
        continue;
    }
........
}
Amit Bera
fuente
También puede usar el código Marius para fines de visibilidad del usuario
Amit Bera
Sin embargo, hay un problema ... No puedo obtener el color, el tamaño, etc. Cuando uso getAllVisibleItems (). ¿Cómo debo hacer eso?
Pat
sí, es posible utilizando el modelo de producto de Sku, porque sku es igual para dos .. filas
Amit Bera
10

Usar en $cart->getAllVisibleItems()lugar de $cart->getAllItems().
Obtiene duplicados porque al agregar un producto configurable al carrito, magento en realidad agrega 2 productos, el producto simple y el producto configurable, pero solo uno es visible para el usuario.

Marius
fuente
Si agrego un producto simple, ¿también agregará automáticamente el configurable? ¿O necesito hacerlo manualmente?
Pat
No. Cuando agrega un producto configurable, habrá 2 en el carrito.
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
fuente
Agregue código en <? Php?> Para todas las líneas
Bhagyavant