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); }