1.视图js代码
//点击加$(document).on('click','.add',function(){$(this).parent().find('.hidebox').show();// 当点击的时候给父级加一个class,在循环的时候判断是否有check$(this).parent().addClass('check');// 获取到框内的初始值var num = $(this).parent().find('.num').text()// 点击的时候每次加1var final = Number(num) +1;// 将加过的数据赋值给数量值var num = $(this).parent().find('.num').text(final)// 获取到商品的idvar 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()// 点击一次减1var final = Number(num) - 1;// 数量框最终的值var num = $(this).parent().find('.num').text(final)// 获取到商品的idvar 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();}})
2.控制器代码
/*思路:前台点击加和减异步传输商品的数量和商品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);}
3.视图前端代码(判断加减号显示与不显示)
<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>
