【PHP】購物車的加減算總額
阿新 • • 發佈:2018-11-09
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); }