1.视图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();
}
})
2.控制器代码
/*
思路:
前台点击加和减
异步传输商品的数量和商品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);
}
3.视图前端代码(判断加减号显示与不显示)
<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>