0

この関数は、単一の割引コードを使用してグローバルなパーセンテージを正常に計算しますが、コードがグローバルではなく特定の範囲のアイテムを割引するのに問題があります。バスケットセッションは、ID、名前、説明、価格、数量などを保持しています...しかし、これまでに試したことはすべて失敗しました.foreachループに実装する必要があることに気付きました(すべてのアイテムを一方向で壊したり更新したりします)または別のもの)または完全に別の方法を使用しますが、どのように進めるかは本当にわかりません。

私は経験豊富な PHP 開発者ではありません。基本的なマークアップの学習と操作を楽しんでいるだけです。誰かが提供できる有用な指針は非常に高く評価されます。ありがとう!

    $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;
4

1 に答える 1

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'] を作成して、データベースを介してアイテムのディスカウント層またはある種のディスカウント ID を作成できることを伝えました。この場合、1 の場合、商品を値引きできるという意味で使用します。利用可能なものを使用して、これをやりたいようにするのはあなた次第です。何ができるか、何が利用できるかわからないので、私たちが提案できることは限られています。

これは物事を処理する 1 つの方法にすぎません。質問を絞り込むと、より具体的な例で更新される可能性があります。

于 2012-11-06T20:03:32.220 に答える