此功能使用单个折扣代码成功计算全局百分比,但我在使代码折扣特定范围的项目而非全局时遇到问题。篮子会话持有id,name,desc,price,qty等...但是到目前为止我尝试的所有内容都失败了,我意识到我需要将它实现到foreach循环中(我不断破坏或更新每个项目的方式)或另一种)或完全使用不同的方法,但我真的不确定如何继续。
我不是一个经验丰富的PHP Dev,就像我喜欢学习和工作基本标记一样。任何有用的指针都会非常感激。谢谢!
$code = $this->request['code'];
$discount_status = 'NONE'; // no discount available / applied
if ( !empty($this->config['DISCOUNT_CODE']) && !empty($this->config['DISCOUNT_PERCENT']) && !empty($code) ) {
if ( $code == $this->config['DISCOUNT_CODE'] ) {
$discount_status = 'OK';
}
else {
$discount_status = 'ERROR';
}
}
// calculate basket total
$basket_value = 0;
$discount_factor = 1;
if ( $discount_status == 'OK' ) {
// apply discount
$discount_factor = ( 100 - $this->config['DISCOUNT_PERCENT'] ) / 100;
}
if ( !empty($_SESSION['basket']) && is_array($_SESSION['basket']) ) {
foreach( $_SESSION['basket'] as $basketItem ) {
// Apply discount to each item separately
$basket_value += sprintf("%.02f", $basketItem['detail_price'] * $discount_factor) * $basketItem['qty'];
}
}
// check delivery cost
$delivery_area = $this->DeliveryAreaManager->getRecord($this->request['da']);
if ( !empty($delivery_area['cost']) && ( $delivery_area['free_from'] <= 0 || $basket_value < $delivery_area['free_from'] ) ) {
$basket_value += $delivery_area['cost'];
}
// return JSON response
$data = JSONUtils::encode(
array(
'discount_status' => $discount_status,
'basket_value' => sprintf("%.02f", $basket_value),
)
);
return $data;
答案 0 :(得分:0)
此:
foreach( $_SESSION['basket'] as $basketItem ) {
// Apply discount to each item separately
$basket_value += sprintf("%.02f", $basketItem['detail_price'] * $discount_factor) * $basketItem['qty'];
}
说要对每个项目应用折扣。它没有条件。您需要定义告诉代码应用折扣的条件。这是非常广泛的,所以我们不能告诉你如何为你做这个,但我们可以告诉你你怎么可能以一种非常可怕的方式做到这一点......
foreach( $_SESSION['basket'] as $basketItem ) {
// Apply discount to each item separately
if($basketItem['discount_bracket'] == 1)
{
$basket_value += sprintf("%.02f", $basketItem['detail_price'] * $discount_factor) * $basketItem['qty'];
}
else
{
$basket_value += sprintf("%.02f", $basketItem['detail_price']) * $basketItem['qty'];
}
}
现在,显然我只是编造了$ basketItem ['discount_bracket']来告诉你,你可以通过数据库为项目制作折扣级别或某种折扣标识符。在这种情况下,我只是用它来说是1然后该项目可以打折。你可以根据自己的需要做到这一点。鉴于我们不知道您可以做什么或您有什么可用,我们的建议是有限的。
这只是处理事情的一种方法。如果您缩小问题的范围,我可能会使用更具体的示例进行更新。