¿Cómo obtener todos los artículos en el carrito actualmente?

Respuestas:

61
$cart = Mage::getModel('checkout/cart')->getQuote();
foreach ($cart->getAllItems() as $item) {
    $productName = $item->getProduct()->getName();
    $productPrice = $item->getProduct()->getPrice();
}

en $cartusted obtuvo toda la colección de artículos del carrito y si desea obtener la identificación del producto, nombre que puede obtener al usar foreach loop

Keyur Shah
fuente
66
funciona pero muestra todos los productos, incluidos los productos que pertenecen a productos configurables. Para mostrar todos los productos, excepto los que mencioné, debe usar getAllVisibleItems ()
Attila Naghi
¿Cómo mostrar la cantidad de estos artículos?
Marcos Vinicius
¿Deberías estar usando getModel? ¿No deberías estar usando getSingleton?
Danny Dev Nz
28

Encontré otra solución. El siguiente código me funciona.

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
    $productId = $item->getProductId();     
    // Do something more
}
Sukeshini
fuente
¿Cómo mostrar la cantidad de estos artículos?
Marcos Vinicius
1
¿Por qué 27 votos a favor para cargar productos en un bucle ...?
sv3n
Esto tiene un rendimiento terrible ... está cargando cada producto en un bucle cuando ya están disponibles a través de $item->getProduct()... Cada vez que piensa en usar -> load () en magento puede contar con un mal rendimiento, a veces no hay otro opción realmente, pero este no es el caso aquí ..
OZZIE
1
@ sv3n: Gracias por señalarlo. Modificó el código
Sukeshini
21

Existen varios métodos que funcionan de manera diferente:

  1. $items = Mage::getSingleton('checkout/cart')->getQuote()->getItemsCollection();

    Devuelve una colección de artículos de cotización con todos los artículos asociados a la cotización actual.

  2. $items = Mage::getSingleton('checkout/cart')->getItems();

    Este es un acceso directo para el método anterior, pero si no hay comillas, devuelve una matriz vacía, por lo que no puede confiar en obtener una instancia de colección.

  3. $items = Mage::getSingleton('checkout/cart')->getQuote()->getAllItems();

    Carga la colección de elementos, luego devuelve una matriz de todos los elementos que no están marcados como eliminados (es decir, se han eliminado en la solicitud actual)

  4. $items = Mage::getSingleton('checkout/cart')->getQuote()->getAllVisibleItems();

    Carga la colección de elementos, luego devuelve una matriz de todos los elementos que no están marcados como eliminados Y no tienen un elemento primario (es decir, obtiene elementos para productos agrupados y configurables pero no sus elementos secundarios asociados). Cada elemento de la matriz corresponde a una fila mostrada en la página del carrito.

Elija lo que mejor se adapte a sus necesidades. En la mayoría de los casos, el último método es el que necesita, pero desafortunadamente Magento solo lo proporciona como matriz y no como colección.


Tenga en cuenta que Mage::getSingleton('checkout/cart')->getQuote()y Mage::getSingleton('checkout/session')->getQuote()son intercambiables.

Fabian Schmengler
fuente
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 />";
}

La mejor manera de obtener todo el artículo en el carrito

Rahul Singh
fuente
Use Mage :: getSingleton ('checkout / cart') -> getQuote () -> getAllItems ();
Aman Srivastava
¿Por qué? ¿Cual es la diferencia?
LM_Fielding
-7

El siguiente código se utiliza para obtener artículos del carrito

$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()) {

   }
}
Abhishek Gupta
fuente