7

Magento拡張機能を作成しています。カート内のアイテム数量をプログラムで更新したい。次のコードを使用して、カート内のアイテムを表示しています。

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

私が欲しいのは、特定の製品のカートの数量を更新することです。私はそれがこのようにできることを知っています

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

しかし、この方法は、すべての製品を調べて1つの製品の数量を更新するため、好きではありません。forループを使用せずに1行で数量を更新する方法があるのだろうか。

4

3 に答える 3

13

あなたはitem_idではなくproduct_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();

いくつかの簡単なトリックでこれを最適化する必要があります。

$quote->hasProductId($pid) to check if product is in the cart

($qty!=$item->getQty())

数量が十分でないかどうかを確認するには...

これはテストされていないコードであり、解決策を見つけるのに役立つある種の反省であることに注意してください。私はあなたのために仕事をしませんでした。

敬具、

于 2013-03-01T08:43:44.550 に答える