【PHP】购物车的加减算总额

举报
原来是咔咔 发表于 2022/03/27 01:56:23 2022/03/27
【摘要】 author:咔咔 wechat:fangkangfk 前端代码: <if condition="!isset($_SESSION['Cart'][$k]['user_num'])"> <div class="none hidebox num" data-id="'+foodinfo[i].id+'"&gt...

author:咔咔

wechat:fangkangfk

前端代码:


  
  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>

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

控制器:
 

这是没有经过封装的代码,参考后需要简单封装一下


  
  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. }

文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fangkang7/article/details/83866820

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。