【PHP】购物车的加减算总额
【摘要】
author:咔咔
wechat:fangkangfk
前端代码:
<if condition="!isset($_SESSION['Cart'][$k]['user_num'])"> <div class="none hidebox num" data-id="'+foodinfo[i].id+'">...
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);
-
-
-
}
文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/fangkang7/article/details/83866820
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)