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?

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

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.


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

?>

Agregue código en <? Php?> Para todas las líneas
Bhagyavant
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.