2012-03-26 75 views
1

我有一個奇怪的問題沒有人似乎得到。免除我的場地:) 我已經添加了新的/自定義促銷規則(app/code/core/Mage/SalesRule/Model/Validator.php) 一切正常,但我想更新購物車數量。所以如果我添加10個產品到我的購物車,我想免費添加一個產品。所以,買10個11個產品。更改購物車的數量

case 'buy_x_get_y_free': 
$x = $rule->getDiscountStep(); // 10 
$y = $rule->getDiscountAmount(); // 1 

$free = 0; 

for($i=$x; $i<=$qty; $i+=$x){ 
    $free+=$y; 
} 

$discountAmount = $free*$itemPrice; 
$baseDiscountAmount= $free*$baseItemPrice; 

$newQty = $qty + $free; // Should be 11 right? 
$item->setQty($newQty); 

break; 

那麼腳本的作品。堅持'新'的數量是12而不是11.有人可以幫我嗎?

+0

我的答案是否奏效? – ScottC 2012-03-30 14:38:58

回答

0

這裏的原始的海報討論這個之後是一個新的想法

當驗證腳本調用運行它的整個腳本再次顯然並使用$qty$item->setQty($newQty);所以第二次設置$item對象腳本運行$qty=11,然後1被再次添加到其帶到12,而不是數量存儲在2個獨立的變量,如$qty$free

case 'buy_x_get_y_free':  
$x = $rule->getDiscountStep(); // 10  
$y = $rule->getDiscountAmount(); // 1  

$free = 0;  

for($i=$x; $i<=$qty; $i+=$x){  
    $free+=$y;  
}  

$discountAmount = $free*$itemPrice;  
$baseDiscountAmount= $free*$baseItemPrice;  


$item->setQty($qty); 
$item->setFree($free); 

break;  

,你將需要添加$free進入$item目標代碼

試試

+0

是的,那是真的。但是當你添加$ item-> setQty($ newQty);比它出錯... – 2012-03-27 08:43:30

+0

那麼你的setQty()函數是什麼樣的?也許可以將函數中的Qty設置爲0,然後向其添加newQty? – ScottC 2012-03-27 12:23:25

+0

問題是(我認爲)是更新購物車時,validator.php被調用2次。 結帳/購物車/ updatePost /和這裏結帳/購物車/ 一切工作正常(價格,稅收等)免除數量。我是唯一有這個問題的人嗎?它使我瘋狂。在這個'小'問題上工作2天。 :( – 2012-03-27 13:57:22