1.视图js代码

    1. //点击加
    2. $(document).on('click','.add',function(){
    3. $(this).parent().find('.hidebox').show();
    4. // 当点击的时候给父级加一个class,在循环的时候判断是否有check
    5. $(this).parent().addClass('check');
    6. // 获取到框内的初始值
    7. var num = $(this).parent().find('.num').text()
    8. // 点击的时候每次加1
    9. var final = Number(num) +1;
    10. // 将加过的数据赋值给数量值
    11. var num = $(this).parent().find('.num').text(final)
    12. // 获取到商品的id
    13. var shop_id = $(this).parents('.right_total').attr('shop_id');
    14. // 计算总价
    15. $.post("{:U('addon/WeiuidDeit/Mobile/listTotal')}",{id:shop_id,user_num:final},function(data){
    16. // 总价
    17. // $('#allmoney').html(data['return_data'][0]);
    18. $('#allmoney').html(data['return_data'][0]);
    19. // 总数量
    20. $('#allcount').html(data['return_data'][1]);
    21. },'json')
    22. })
    23. //点击减
    24. $(document).on('click','.reduce',function(){
    25. // 获取到input的初始值
    26. var num = $(this).parent().find('.num').text()
    27. // 点击一次减1
    28. var final = Number(num) - 1;
    29. // 数量框最终的值
    30. var num = $(this).parent().find('.num').text(final)
    31. // 获取到商品的id
    32. var shop_id = $(this).parents('.right_total').attr('shop_id');
    33. $.post("{:U('addon/WeiuidDeit/Mobile/listTotal')}",{id:shop_id,user_num:final},function(data){
    34. // 总价
    35. $('#allmoney').html(data['return_data'][0]);
    36. // 总数量
    37. $('#allcount').html(data['return_data'][1]);
    38. },'json')
    39. if(final<1 ){
    40. $(this).parent().find('.num').html(0);
    41. $(this).parent().find('.hidebox').hide();
    42. }
    43. })

    2.控制器代码

    1. /*
    2. 思路:
    3. 前台点击加和减
    4. 异步传输商品的数量和商品id
    5. 根据商品id查询对应商品信息
    6. 准备存根据商品信息存session
    7. 点击加和减的时候判断session的下标(商品的id)是否存在
    8. 当session下标id不存在则创建,保存商品的基本信息,
    9. 并根据数量和单价计算单个商品的小计和,在购物车也可以使用
    10. 当session下标id存在的时候,只需要修改对应商品的数量和总价
    11. 在这里需要做个容错,当用户数量为小于等于0的时候,
    12. 直接删除对应商品的session数据
    13. 根据以上操作就来到了关键
    14. 将所有商品的小计,数量的总和相加,重新赋值session
    15. 视图的总数量和总价直接输出session的值即可
    16. */
    17. // 列表页左下角计算总价
    18. public function listTotal(){
    19. // 商品的数量和id
    20. $shop_id = I();
    21. // 获取到用户数量
    22. $user_num = I('user_num',0);
    23. $cart= D('food');
    24. // session('Cart',null);
    25. // 查询购物车信息
    26. $cart_data = $cart->where([
    27. 'id'=>$shop_id['id']
    28. ])->find();
    29. $shop_data = $cart->select();
    30. // 点加减号的时候判断session有无商品
    31. if(!isset($_SESSION['Cart'][$cart_data['id']])){
    32. // 如果session不存在商品id时创建session和数据库添加
    33. session('Cart.'.$cart_data['id'],[
    34. 'id'=>$cart_data['id'],
    35. 'user_num'=>$user_num,
    36. 'goods_price'=>$cart_data['food_price'],
    37. 'goods_name'=>$cart_data['food_name'],
    38. 'total'=>$cart_data['food_price']*$user_num,
    39. 'goods_picture' => $cart_data['food_picture'],
    40. 'goods_name' => $cart_data['food_name']
    41. ]);
    42. }else{
    43. // 如果session存在商品id的话就修改
    44. $_SESSION['Cart'][$cart_data['id']]['user_num'] = $user_num;
    45. $_SESSION['Cart'][$cart_data['id']]['total'] = $cart_data['food_price']*$user_num;
    46. // 如果有商品并且减到不选择商品将session删除
    47. if($user_num <= 0){
    48. unset($_SESSION['Cart'][$cart_data['id']]);
    49. }
    50. }
    51. $cart_list = session('Cart');
    52. $total = 0;
    53. $num = 0;
    54. // 最终的商品信息session值
    55. foreach($cart_list as $k=>$v){
    56. // 计算总价
    57. $total += $v['total'];
    58. // 计算总数量
    59. $num += $v['user_num'];
    60. }
    61. session('total',$total);
    62. session('num',$num);
    63. $cartlist = array($total,$num);
    64. if(!$cartlist){
    65. $return['return_code'] = 400;
    66. $return['return_msg'] = '购物车空空如也';
    67. }else{
    68. $return['return_code'] = 200;
    69. $return['return_msg'] = '查询成功';
    70. $return['return_data'] = $cartlist;
    71. }
    72. $this->ajaxReturn($return);
    73. }

    3.视图前端代码(判断加减号显示与不显示)

    1. <if condition="!isset($_SESSION['Cart'][$k]['user_num'])">
    2. <div class="none hidebox num" data-id="'+foodinfo[i].id+'">0</div>
    3. <div class="none hidebox reduce" style="cursor:pointer">-</div>
    4. <else />
    5. <div class=" hidebox num" data-id="'+foodinfo[i].id+'"> {$_SESSION['Cart'][$k]['user_num']}
    6. </div>
    7. <div class=" hidebox reduce" style="cursor:pointer">-</div>
    8. </if>