2011-06-27 72 views
1

我写了一个买一个免费的Magento模块,它在Magento 1.3.x中完美地工作。添加免费产品到Magento中的免费产品的问题

它扩展了“Mage_Checkout_CartController”以在符合条件逻辑时将免费(简单)产品添加到购物车。我已经修改了“indexAction()”功能扩展“CartController.php”,并增加额外的代码和逻辑然而,添加使用

$cart->addProduct($FREPRODUCTID, 1); 
$cart->save(); 
$this->_getSession()->setCartWasUpdated(true); 

这工作正常,在Magento的1.3.x(CE)基本上都添加了免费的项目在1.4和1.5中,我所看到的是将免费商品添加到购物车中,但购物车总额不会更新以包含我的代码添加的产品,并且在结帐时不会看到该产品。尽管该产品是免费的,但配置了零价格,但我还注意到,当我给产品一个价格,即1美元时,产品仍然以零价格出现在购物车中,好像它没有被识别。免费的产品配置正确,并且可以销售,有现货等。

对于为什么我的产品被添加到购物车,但不知何故在Magento 1.4/1.5系统中没有被正确看到的任何建议?

由于

PAJ

回答

1

尝试使用此代码&测试: -

$product = Mage::getModel('catalog/product'); 
$product->setStoreId(Mage::app()->getStore()->getId()); 
$product->load($FREPRODUCTID); 

$cart = Mage::getSingleton('checkout/cart'); 
$cart->init(); 

$cartItems = $cart->getQuote()->getAllItems(); 
$counter = 1; 
$cartData = array(); 
if (count($cartItems)) { 
    foreach ($cartItems as $_eachItem) { 
     $cartData[$counter]['qty'] = $_eachItem->getQty(); 
     $counter++; 
    } 
} 

$freeProductQty = 1; 
$cart->addProduct($product, array('qty' => $freeProductQty, 'product' => $FREPRODUCTID)); 
$cartData[$counter]['qty'] = $freeProductQty; 

$cartData = $cart->suggestItemsQty($cartData); 
$cart->updateItems($cartData) 
    ->save(); 

$this->_getSession()->setCartWasUpdated(true); 

在方法 “addProduct()”,我已经具体提到的所需产品对象(这是要添加到购物车)作为第一个参数&该产品的数量作为第二个参数。

希望它有帮助。

+0

谢谢,我正在使用 $ product = Mage :: getModel('catalog/product') - > load($ FREEPRODUCT); and $ cart = $ this - > _ getCart(); 随着你的建议,结果是完全一样的。产品在购物车中,但似乎没有被识别,即如果购物车中有5种产品,并且免费产品已添加,购物车总数仍显示为5.有趣的是,如果我点击购物车中的免费产品以查看它,然后回到购物车,产品被识别,并且购物车总数是正确的。删除产品,并将其重新添加并且不会再被识别... – paj

+1

好的,如果我现在手动更新购物车,产品看起来像是我的购物车保存/更新不正确? – paj

+0

@paj - 你可以请检查编辑后的答案,然后再试一次,因为我更新了调用“'addProduct()'”方法的语句吗?我会建议你先试试这个更新的解决方案。 –

0

这应该确保车被正确地更新:

 session_write_close(); 
     $this->_redirect('checkout/cart'); 

当我加入这个我扩展cartcontroller功能后,我的产品添加和保存购物车,然后将车正确呈现我的高附加值产品。

相关问题