2011-06-27 76 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功能後,我的產品添加和保存購物車,然後將車正確呈現我的高附加值產品。