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


  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咔咔-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值