当前如何获取购物车中的所有物品?


Answers:


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

$cart你有车项目的所有收藏,如果你想获得产品ID,名称可以使用foreach循环得到


6
它可以工作,但是会显示所有产品,包括属于可配置产品的产品。要显示除我提到的产品以外的所有产品,您必须使用getAllVisibleItems()
Attila Naghi 2015年

如何显示此物品的数量?
Marcos Vinicius

您应该使用getModel吗?您不应该使用getSingleton吗?
Danny Dev Nz

28

我找到了另一个解决方案。以下代码对我有用。

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
    $productId = $item->getProductId();     
    // Do something more
}

如何显示此物品的数量?
Marcos Vinicius

1
为什么要27个投票赞成在循环中加载产品?
sv3n

这会带来糟糕的性能。.当每个产品都可以通过以下方式循环加载时,您正在循环加载它们$item->getProduct()。每当您考虑在magento中使用-> load()时,您都可以指望性能不佳,有时还没有其他性能选项确实可以,但事实并非如此
。.– OZZIE

1
@ sv3n:感谢您指出。修改代码
Sukeshini

20

有几种方法以不同的方式起作用:

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

    返回带有所有与当前报价相关联的项目的报价项目集合。

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

    这是上面方法的快捷方式,但是如果没有引号,它将返回一个空数组,因此您不能依赖于获取集合实例。

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

    加载项目集合,然后返回所有未标记为已删除(即在当前请求中已删除)的项目的数组

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

    加载项集合,然后返回一个数组的所有项目以删除未标明并做没有父(即你的捆绑和配置的产品,但不是他们中的儿童项目)。每个阵列项目对应于购物车页面中显示的行。

选择最适合您的需求。在大多数情况下,您需要使用最后一种方法,但是不幸的是,Magento仅以数组而不是集合的形式提供它。


请注意,Mage::getSingleton('checkout/cart')->getQuote()Mage::getSingleton('checkout/session')->getQuote()是可互换的。


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

获取购物车中所有物品的最佳方法


使用Mage :: getSingleton('checkout / cart')-> getQuote()-> getAllItems();
Aman Srivastava

为什么?有什么不同?
LM_Fielding '17

-7

下面的代码用于获取购物车物品

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

   }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.