Php 更改购物车中的数量

Php 更改购物车中的数量,php,magento,Php,Magento,我有一个奇怪的问题,似乎没人能理解。当然不包括我:) 我添加了一个新的/自定义的促销规则(app/code/core/Mage/SalesRule/Model/Validator.php) 一切正常,但我想更新购物车的数量。因此,如果我在购物车中添加10种产品,我想免费添加一种产品。所以,买10件,买11件 case 'buy_x_get_y_free': $x = $rule->getDiscountStep(); // 10 $y = $rule->getDiscountAmou

我有一个奇怪的问题,似乎没人能理解。当然不包括我:) 我添加了一个新的/自定义的促销规则(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;
案例“免费购买x获得y”:
$x=$rule->getDiscountStep();//10
$y=$rule->getDiscountAmount();//1.
$free=0;
对于($i=$x;$isetQty($newQty);
打破

嗯,剧本很好用。“新”的数量是12而不是11。有人能帮我吗?

在与原始海报讨论后,这里有一个新想法

调用验证脚本时,它将再次运行整个脚本,并使用
$item->setQty($newQty)设置的
$item
对象中的
$qty
因此,脚本第二次运行时,
$qty=11
,然后再次添加1,使其变为12,而不是将数量存储在两个单独的变量中,如
$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;    
案例“免费购买x获得y”:
$x=$rule->getDiscountStep();//10
$y=$rule->getDiscountAmount();//1
$free=0;
对于($i=$x;$isetQty($qty);
$item->setFree($free);
打破
您需要将
$free
添加到
$item
对象代码中


尝试一下

那么setQty()函数是什么样子的呢?可能先将函数中的Qty设置为0,然后再将newQty添加到函数中?问题是(我认为)在更新购物车时,validator.php被调用了2次。checkout/cart/updatePost/这里checkout/cart/一切正常(价格、税收等)数量除外。我是唯一一个有这个问题的人吗?这让我发疯。在这个“小”问题上工作了两天:(我们不知道你是否是唯一一个有这个问题的人,因为我们看不到你发布的代码之外的任何东西,也许问题出在validator.php上,但我们没有这个文件可以查看,如果你可以在你的主要问题中发布它,那么我们可以对此做出更好的判断,如果你的代码都是手写的,那么你很可能是唯一存在此问题的是,如果另一方面,您在某个地方下载了此代码,而其他人正在使用它,那么可能他们也有相同的问题。仅在magento core中(1.4.1.1)app/code/core/Mage/SalesRule/Model/Validator.php我只是修改它来改变数量。希望它能工作,如果是这样,请投票支持我或给我一个绿色的大复选标记:)祝你好运