PHP SQL特定项目的折扣代码?

时间:2012-11-06 19:24:17

标签: php sql database function

此功能使用单个折扣代码成功计算全局百分比,但我在使代码折扣特定范围的项目而非全局时遇到问题。篮子会话持有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;

1 个答案:

答案 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然后该项目可以打折。你可以根据自己的需要做到这一点。鉴于我们不知道您可以做什么或您有什么可用,我们的建议是有限的。

这只是处理事情的一种方法。如果您缩小问题的范围,我可能会使用更具体的示例进行更新。