Magento:以编程方式更新购物车数量

Nir*_*Ram 6 php magento e-commerce magento-1.7

我正在创建一个magento扩展.我想以编程方式更新购物车中的商品数量.我使用以下代码显示购物车中的项目.

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
  //Do something
}
Run Code Online (Sandbox Code Playgroud)

我想要的是更新特定产品的购物车数量.我知道可以这样做

$pid=15;
$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
if($pid==$item->getId())
$item->setQty($qty);
}
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这种方法,因为它会通过每个产品来更新单个产品的数量.我想知道是否有办法在一行中更新数量i:e而不使用for循环.

dag*_*gfr 13

你有product_id,而不是item_id吗?

如果是这种情况,则在不执行整个项目的情况下无法获得产品ID.

看看Mage_Sales_Model_Quote::getItemByProduct($product);你会看到它执行整个目录.

基本上我会这样做:

//get Product 
$product = Mage::getModel('catalog/product')->load($pid);
//get Item
$item = $quote->getItemByProduct($product);

$quote->getCart()->updateItem(array($item->getId()=>array('qty'=>$qty)));
$quote->getCart()->save();
Run Code Online (Sandbox Code Playgroud)

你应该用一些快速技巧来优化它:

$quote->hasProductId($pid) to check if product is in the cart
Run Code Online (Sandbox Code Playgroud)

($qty!=$item->getQty())
Run Code Online (Sandbox Code Playgroud)

检查数量是否已经好...

请注意,它是未经测试的代码,以及某种反射来帮助您找到解决方案,我没有为您完成这项工作.

亲切的问候,