author:咔咔

前端代码:

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


}