gistfile1.txt 0){ //用户已登录,更新购物车表的数量 $where = array( 'goods_id' = $goods_id, 'goods_attr_ids' = $goods_attr_ids, 'user_id' = $member_id ); //获取到当前商品所在商品表的库存 $goodsInfo = M("Goods")-
0){
//用户已登录,更新购物车表的数量
$where = array(
'goods_id' => $goods_id,
'goods_attr_ids' => $goods_attr_ids,
'user_id' => $member_id
);
//获取到当前商品所在商品表的库存
$goodsInfo = M("Goods")->find($goods_id);
//获取到购物车商品的库存
$cartInfo = M("Cart")->where($where)->find();
//只有购物车商品库存小于商品表库存的情况下,才更新购物车商品的数量
//并且购物车的商品数量不可以超过200件
if($cartInfo['goods_number'] < $goodsInfo['goods_number'] && $cartInfo['goods_number'] < 200 ){
$saveData = array(
'cart_id' => $cartInfo['cart_id'],
'goods_number' => $cartInfo['goods_number'] + 1
);
//更新购物的数量方式一
if(M("Cart")->save($saveData)!==false){
return true;
}else{
return false;
}
//更新购物的数量方式一 setInc('字段',"新增的值") setDec('字段',"减少的值")
//M("Cart")->where( $where )->setInc("goods_number",1)
}
}else{
//用户未登录
$key = $goods_id.'-'.$goods_attr_ids;
$cookieData = cookie('cartData')?cookie('cartData'):array();
//判断$key是否存在$cookieData的下标中
if($cookieData[$key]){
//说明之前cookie中有数据,则数量加1
$cookieData[$key] += 1;
//重新把数据存储到cookie中去,有效期为一个星期
cookie('cartData',$cookieData,time() + 86400*7);
return true;
}
}
}
//离线购物车商品转存到在线购物车
public function moveOffCartToOnlineCart(){
$member_id = session('member_id');
//先取出离线购物车的数据
$cookieData = cookie('cartData')?cookie('cartData'):array();
foreach ($cookieData as $key => $goods_number) {
$key = explode('-',$key);
$where = array(
'goods_id' => $key[0],
'goods_attr_ids' => $key[1],
'user_id' => $member_id
);
//判断在线购物车(购物车表)之前有没有加入相同的商品
$result = M("Cart")->where($where)->find();
if($result){
//进来了说明在线购物车有相同商品,直接加数量
$saveData = array(
//更新数量
'cart_id' => $result['cart_id'],
//之前购买的数量加现在买的数量
'goods_number' => $result['goods_number']+$goods_number
);
M('Cart')->save($saveData);
}else{
//进来了说明在线购物车没有相同商品,直接加商品即可
//直接在之前的where数组中加一个数量即可
$where['goods_number'] = $goods_number;
M("Cart")->add( $where );
}
//不管购物车中之前是否有相同的商品,还是新加的商品,转存之后,离线购物车中的商品都应该清除
cookie("cartData",null);
}
}
/**
* 加入商品到购物车
* @param $goods_id 商品的goods_id
* @param $goods_attr_ids 商品的属性id
* @param $goods_number 商品的数量
*/
public function addGoodsToCart($goods_id,$goods_attr_ids,$goods_number){
//加入购物车考虑两种情况 1.用户登陆-存储到购物表中 2、用户未登陆-存储到cookie中
$member_id = session("member_id");
if($member_id > 0){
//用户已经登陆情况
$condition = array(
//定义查询的条件数组
'goods_id' => $goods_id,
'goods_attr_ids' => $goods_attr_ids,
'user_id' => $member_id,
'_logic' => 'and'
);
//判断购物表中用户有没有加入过相同的商品
$result = M("Cart")->where($condition)->find();
if($result){
//购物车有相同商品,数量加$number
return M('Cart')->where($where)->setInc('goods_number',$goods_number);
}else{
//购物车没有相同商品,直接将此商品加入购物车
$addData= array(
'goods_id' => $goods_id,
'goods_attr_ids' => $goods_attr_ids,
'goods_number' => $goods_number,
'user_id' => $member_id
);
return M("Cart")->add($addData);
}
}else{
//用户未登陆情况
//cookie存储商品的结构,
/*
array(
//数组下标 goods_id-goods_attr_ids => 值 goods_number
"goods_id-goods_attr_ids" => goods_number
)
*/
$cartData = cookie('cartData')?cookie('cartData'):array();
$key = $goods_id.'-'.$goods_attr_ids;
//判断之前有没有买过,有则加数量
if($cartData[$key]){
$cartData[$key] += $goods_number; //加数量
}else{
$cartData[$key] = $goods_number; // 直接加商品
}
//存储到cookie中,存储一个星期
cookie("cartData",$cartData,time() + 86400 * 7);
return true;
}
}
/**
* 获取购物车中的商品
*/
public function getCartGoodsData(){
$member_id = session("member_id");
//获取购物车的商品
if($member_id > 0){
//用户登陆
$condition = array(
'user_id' => $member_id
);
//把购物车中的商品赋值给当前购物对象的cartData属性,用于保存购物车中的商品
$cartData = M('Cart')->where($condition)->select();
}else{
//用户未登陆
//cookie存储数据的结构,下标为 goods_id-goods_attr_ids => 值goods_number
$cookieData = cookie('cartData')?cookie('cartData'):array();
$cartData = array();
foreach ($cookieData as $k => $v) {
$key = explode('-',$k);
$cartData[] = array(
'goods_id'=>$key[0],
'goods_attr_ids'=>$key[1],
'goods_number'=>$v
);
}
}
//获取购物车商品的信息和商品的单选属性信息
foreach ($cartData as $k => $v) {
//获取商品基本信息保存到购物车每个商品Goods属性中
$cartData[$k]['Goods'] = D("Goods")->find($v['goods_id']);
//获取商品单选属性信息保存到购物车每个商品的GoodsAttr属性中
if($v['goods_attr_ids']){
//有单选属性 (每个单选属性通过group_CONCAT()链接在一起去,并通过隔开)
$cartData[$k]['GoodsAttr'] = D('GoodsAttr')
->field("group_CONCAT( t2.attr_name,' : ',t1.attr_value,'+',t1.attr_price,'元' separator '') as attr,sum(t1.attr_price) as attr_total_price")
->join("t1 left join sh_attribute t2 on t1.attr_id = t2.attr_id ")
->where("t1.goods_attr_id in ({$v['goods_attr_ids']})")
->find();
}else{
//无单选属性设置为空字符即可
$cartData[$k]['GoodsAttr'] = '';
}
}
//返回购物车数据
return $cartData;
}
/**
* 清空购物车中的商品
*/
public function clearCart(){
$member_id = session("member_id")?:0;
if($member_id > 0){
//用户登录了
return M("Cart")->where("user_id=" .$member_id)->delete();
}else{
//未登录情况
cookie('cartData',null,time() - 1);
return true;
}
}
/**
* 购物车商品的删除
*/
public function delCartGoods($goods_id,$goods_attr_ids){
$member_id = session("member_id")?:0;
//判断用户是否登陆
if($member_id > 0){
//已登录
$condition = array(
'user_id' => $member_id,
'goods_attr_ids' => $goods_attr_ids,
'goods_id' => $goods_id
);
return M('Cart')->where($condition)->delete(); //删除
}else{
//未登录
$cartData = cookie('cartData')?cookie('cartData'):array();
$key = $goods_id.'-'.$goods_attr_ids;
unset($cartData[$key]); //直接删除已有的键值
//删除之后再在存储到cookie中,存储一个星期
cookie("cartData",$cartData, 86400 *7);
return true;
}
}
/**
* 获取购物车商品总数
* @return 返回购物车商品的总数
*/
public function getCartCount(){
return count( $this->getCartGoodsData() );
}
}
