1. 程式人生 > >【PHP】購物車的加減算總額

【PHP】購物車的加減算總額

author:咔咔

wechat:fangkangfk

 

前端程式碼:

<if condition="!isset($_SESSION['Cart'][$k]['user_num'])">
	<div class="none hidebox num"  data-id="'+foodinfo[i].id+'">0</div>
	<div class="none hidebox reduce" style="cursor:pointer">-</div>

<else />
	<div class=" hidebox num"  data-id="'+foodinfo[i].id+'">{$_SESSION['Cart'][$k]['user_num']}
	</div>
	<div class=" hidebox reduce" style="cursor:pointer">-</div>
</if>

js:
 


//點選加
$(document).on('click','.add',function(){

    $(this).parent().find('.hidebox').show();

    // 當點選的時候給父級加一個class,在迴圈的時候判斷是否有check
    $(this).parent().addClass('check');

    // 獲取到框內的初始值
    var num = $(this).parent().find('.num').text()

    // 點選的時候每次加1
    var final = Number(num) +1;

    // 將加過的資料賦值給數量值
    var num = $(this).parent().find('.num').text(final)

    // 獲取到商品的id
    var shop_id = $(this).parents('.right_total').attr('shop_id');

    // 計算總價
    $.post("{:U('addon/WeiuidDeit/Mobile/listTotal')}",{id:shop_id,user_num:final},function(data){

        // 總價
        // $('#allmoney').html(data['return_data'][0]);
        $('#allmoney').html(data['return_data'][0]);
        // 總數量
        $('#allcount').html(data['return_data'][1]);

    },'json')
})

//點選減
$(document).on('click','.reduce',function(){
    // 獲取到input的初始值
    var num = $(this).parent().find('.num').text()

    // 點選一次減1
    var final = Number(num) - 1;

    // 數量框最終的值
    var num = $(this).parent().find('.num').text(final)

    // 獲取到商品的id
    var shop_id = $(this).parents('.right_total').attr('shop_id');

    $.post("{:U('addon/WeiuidDeit/Mobile/listTotal')}",{id:shop_id,user_num:final},function(data){

        // 總價
        $('#allmoney').html(data['return_data'][0]);

        // 總數量
        $('#allcount').html(data['return_data'][1]);

    },'json')


    if(final<1 ){

        $(this).parent().find('.num').html(0);

        $(this).parent().find('.hidebox').hide();

    }

})

控制器:
 

這是沒有經過封裝的程式碼,參考後需要簡單封裝一下

	  /*
思路:
    前臺點選加和減
    非同步傳輸商品的數量和商品id
    根據商品id查詢對應商品資訊
    準備存根據商品資訊存session
    點選加和減的時候判斷session的下標(商品的id)是否存在

    當session下標id不存在則建立,儲存商品的基本資訊,
    並根據數量和單價計算單個商品的小計和,在購物車也可以使用

    當session下標id存在的時候,只需要修改對應商品的數量和總價

    在這裡需要做個容錯,當用戶數量為小於等於0的時候,
    直接刪除對應商品的session資料

    根據以上操作就來到了關鍵

    將所有商品的小計,數量的總和相加,重新賦值session

    檢視的總數量和總價直接輸出session的值即可
*/

  // 列表頁左下角計算總價
  public function listTotal(){

      // 商品的數量和id 
      $shop_id = I();

      // 獲取到使用者數量
      $user_num = I('user_num',0);

      $cart= D('food');

      // session('Cart',null);
      // 查詢購物車資訊
      $cart_data = $cart->where([
        'id'=>$shop_id['id']
        ])->find();
    
      $shop_data = $cart->select();
    

      // 點加減號的時候判斷session有無商品
      if(!isset($_SESSION['Cart'][$cart_data['id']])){

        // 如果session不存在商品id時建立session和資料庫新增
        session('Cart.'.$cart_data['id'],[
          'id'=>$cart_data['id'],
          'user_num'=>$user_num,
          'goods_price'=>$cart_data['food_price'],
          'goods_name'=>$cart_data['food_name'],
          'total'=>$cart_data['food_price']*$user_num,
          'goods_picture' => $cart_data['food_picture'],
          'goods_name' => $cart_data['food_name']
          ]);

      }else{

          // 如果session存在商品id的話就修改
          $_SESSION['Cart'][$cart_data['id']]['user_num'] = $user_num;
          $_SESSION['Cart'][$cart_data['id']]['total'] = $cart_data['food_price']*$user_num;

          // 如果有商品並且減到不選擇商品將session刪除
          if($user_num <= 0){
            
            unset($_SESSION['Cart'][$cart_data['id']]);

          }
      }

      $cart_list = session('Cart');

      $total = 0;

      $num = 0;

      // 最終的商品資訊session值
      foreach($cart_list as $k=>$v){
        // 計算總價
        $total += $v['total'];
        // 計算總數量
        $num += $v['user_num'];

        
      }

      session('total',$total);

      session('num',$num);

      $cartlist = array($total,$num);

      if(!$cartlist){

         $return['return_code'] = 400;
         $return['return_msg'] = '購物車空空如也';
      }else{
           $return['return_code'] = 200;
           $return['return_msg'] = '查詢成功';
           $return['return_data'] = $cartlist;
      }
     
      $this->ajaxReturn($return);


  }