【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" >-</div>
<else />
<div class=" hidebox num" data-id="'+foodinfo[i].id+'">{$_SESSION['Cart'][$k]['user_num']}
</div>
<div class=" hidebox reduce" >-</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);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论