购物车分析

购物车使用表deal_cart,session_id表示用户会话id,超过1小时会被自动清除,user_id是注册用户的id,deal_id是商品id,清除代码在app/Lib/app_init.php文件中

//自动刷新购物车与会员的验证资料过期操作
if(check_ipop_limit(get_client_ip(),"auto_refresh_data",30,intval($user_info['id'])))
{
//每小时清空一次购物车
$GLOBALS['db']->query("delete from ".DB_PREFIX."deal_cart where ".get_gmtime()." - update_time > 3600");
//清空会员验证码
$GLOBALS['db']->query("update ".DB_PREFIX."user set lottery_mobile = '',lottery_verify = '', verify_create_time = '' where verify_create_time > 0 and lottery_verify <> '' and ".get_gmtime()." - verify_create_time > 1800");
}

购物车模块在app/Lib/shop/cartModule.class.php文件中,add_cart函数来处理添加商品到购物车中。

public function addcart()
{
//商品id
$id = intval($_REQUEST['id']);
//是否生成抽奖
$is_lottery = $GLOBALS['db']->getOne("select is_lottery from ".DB_PREFIX."deal where id = ".$id);

//如果没有登录和生成抽奖
if(!$GLOBALS['user_info'] && $is_lottery == 1)
{
//弹出登录窗口
$GLOBALS['tmpl']->assign("ajax",1);
$html = $GLOBALS['tmpl']->fetch("inc/login_form.html");
//弹出窗口处理
$res['open_win'] = 1;
$res['html'] = $html;
ajax_return($res);
}

//判断销售时间
$check = check_deal_time($id);
if($check['status'] == 0)
{
$res['open_win'] = 2;
$res['info'] = $check['info']." ".$GLOBALS['lang']['DEAL_ERROR_'.$check['data']];
ajax_return($res);
}

$attr = $_REQUEST['attr'];
$deal_info = load_auto_cache("cache_deal_cart",array("id"=>$id));
//判断商品是否存在
if(!$deal_info)
{
$res['open_win'] = 1;
$res['err'] = 1;
$res['html'] = "没有可以购买的产品";

ajax_return($res);
}

//如果有属性,但提交时没有,则弹出属性窗口
if(!$attr && $deal_info['deal_attr_list'])
{
$GLOBALS['tmpl']->assign("deal_info",$deal_info);
if(intval(app_conf("ATTR_SELECT"))==0)
$html = $GLOBALS['tmpl']->fetch("deal_attr.html");
else
$html = $GLOBALS['tmpl']->fetch("deal_attr_check.html");
//弹出窗口处理
$res['open_win'] = 1;
$res['html'] = $html;
ajax_return($res);
}
else
{
//加入购物车处理,有提交属性, 或无属性时
$attr_str = '0';
$attr_name = '';
$attr_name_str = '';
if($attr)
{
$attr_str = addslashes(implode(",",$attr));
$attr_names = $GLOBALS['db']->getAll("select name from ".DB_PREFIX."deal_attr where id in(".$attr_str.")");
$attr_name = '';
foreach($attr_names as $attr)
{
$attr_name .=$attr['name'].",";
$attr_name_str.=$attr['name'];
}
$attr_name = substr($attr_name,0,-1);
}
$verify_code = md5($id."_".$attr_str);
$session_id = es_session::id();

//如果关闭购物车功能则清空购物车
if(app_conf("CART_ON")==0)
{
$GLOBALS['db']->query("delete from ".DB_PREFIX."deal_cart where session_id = '".$session_id."' and user_id = ".intval($GLOBALS['user_info']['id']));
}

//读取已经购物的商品
$cart_item = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."deal_cart where session_id='".$session_id."' and user_id = ".intval($GLOBALS['user_info']['id'])." and verify_code = '".$verify_code."'");

//读取用户提交的购买数量
$add_number = $number = intval($_REQUEST['number'])<=0?1:intval($_REQUEST['number']);

//开始运算购物车的验证
if($cart_item)
{

$check = check_deal_number($cart_item['deal_id'],$add_number);
//验证购买数量与实际库存不能满足要求,则弹空提示
if($check['status']==0)
{
$res['open_win'] = 1;
$res['err'] = 1;
$res['html'] = $check['info']." ".$GLOBALS['lang']['DEAL_ERROR_'.$check['data']];
$res['number'] = $GLOBALS['db']->getOne("select sum(number) from ".DB_PREFIX."deal_cart where session_id = '".es_session::id()."' and user_id = ".intval($GLOBALS['user_info']['id']));

ajax_return($res);
}

//属性库存的验证
$attr_setting_str = '';
if($cart_item['attr']!='')
{
$attr_setting_str = $cart_item['attr_str'];
}

if($attr_setting_str!='')
{
$check = check_deal_number_attr($cart_item['deal_id'],$attr_setting_str,$add_number);
if($check['status']==0)
{
$res['err'] = 1;
$res['open_win'] = 1;
$res['html'] = $check['info']." ".$GLOBALS['lang']['DEAL_ERROR_'.$check['data']];
$res['number'] = $GLOBALS['db']->getOne("select sum(number) from ".DB_PREFIX."deal_cart where session_id = '".es_session::id()."' and user_id = ".intval($GLOBALS['user_info']['id']));

ajax_return($res);
}
}
//属性库存的验证
}
else //添加时的验证
{
$check = check_deal_number($deal_info['id'],$add_number);
if($check['status']==0)
{
$res['open_win'] = 1;
$res['err'] = 1;
$res['html'] = $check['info']." ".$GLOBALS['lang']['DEAL_ERROR_'.$check['data']];
$res['number'] = $GLOBALS['db']->getOne("select sum(number) from ".DB_PREFIX."deal_cart where session_id = '".es_session::id()."' and user_id = ".intval($GLOBALS['user_info']['id']));

ajax_return($res);
}

//属性库存的验证
$attr_setting_str = '';
if($attr_name_str!='')
{
$attr_setting_str =$attr_name_str;
}



if($attr_setting_str!='')
{
$check = check_deal_number_attr($deal_info['id'],$attr_setting_str,$add_number);
if($check['status']==0)
{
$res['err'] = 1;
$res['open_win'] = 1;
$res['html'] = $check['info']." ".$GLOBALS['lang']['DEAL_ERROR_'.$check['data']];
$res['number'] = $GLOBALS['db']->getOne("select sum(number) from ".DB_PREFIX."deal_cart where session_id = '".es_session::id()."' and user_id = ".intval($GLOBALS['user_info']['id']));

ajax_return($res);
}
}
//属性库存的验证
}

if($deal_info['return_score']<0)
{
//需要积分兑换
$user_score = intval($GLOBALS['db']->getOne("select score from ".DB_PREFIX."user where id = ".intval($GLOBALS['user_info']['id'])));
if($user_score < abs(intval($deal_info['return_score'])*$add_number))
{
$res['err'] = 1;
$res['open_win'] = 1;
$res['html'] = $check['info']." ".$GLOBALS['lang']['NOT_ENOUGH_SCORE'];
$res['number'] = $GLOBALS['db']->getOne("select sum(number) from ".DB_PREFIX."deal_cart where session_id = '".es_session::id()."' and user_id = ".intval($GLOBALS['user_info']['id']));

ajax_return($res);
}
}

//验证over
//验证通过后则添加真正的商品到购物车表,如果没有添加过该商品
if(!$cart_item)
{
$attr_price = $GLOBALS['db']->getOne("select sum(price) from ".DB_PREFIX."deal_attr where id in($attr_str)");

$cart_item['session_id'] = $session_id;
$cart_item['user_id'] = intval($GLOBALS['user_info']['id']);
$cart_item['deal_id'] = $id;
//属性
if($attr_name != '')
{
$cart_item['name'] = $deal_info['name']." [".$attr_name."]";
$cart_item['sub_name'] = $deal_info['sub_name']." [".$attr_name."]";
}
else
{
$cart_item['name'] = $deal_info['name'];
$cart_item['sub_name'] = $deal_info['sub_name'];
}
$cart_item['name'] = addslashes($cart_item['name']);
$cart_item['sub_name'] = addslashes($cart_item['sub_name']);
$cart_item['attr'] = $attr_str;
$cart_item['unit_price'] = $deal_info['current_price'] + $attr_price;
$cart_item['number'] = $number;
$cart_item['total_price'] = $cart_item['unit_price'] * $cart_item['number'];
$cart_item['verify_code'] = $verify_code;
$cart_item['create_time'] = get_gmtime();
$cart_item['update_time'] = get_gmtime();
$cart_item['return_score'] = $deal_info['return_score'];
$cart_item['return_total_score'] = $deal_info['return_score'] * $cart_item['number'];
$cart_item['return_money'] = $deal_info['return_money'];
$cart_item['return_total_money'] = $deal_info['return_money'] * $cart_item['number'];
$cart_item['buy_type'] = $deal_info['buy_type'];
$cart_item['supplier_id'] = $deal_info['supplier_id'];
$cart_item['attr_str'] = $attr_name_str;

$GLOBALS['db']->autoExecute(DB_PREFIX."deal_cart",$cart_item);
}
else
{
//已经添加过的,如果购买数量大于1,则只增加数量
if($number>0)
{
$cart_item['number'] += $number;
$cart_item['total_price'] = $cart_item['unit_price'] * $cart_item['number'];
$cart_item['return_total_score'] = $deal_info['return_score'] * $cart_item['number'];
$cart_item['return_total_money'] = $deal_info['return_money'] * $cart_item['number'];
$GLOBALS['db']->autoExecute(DB_PREFIX."deal_cart",$cart_item,"UPDATE","id=".$cart_item['id']);
}
}

require './system/libs/cart.php';
syn_cart(); //同步购物车中的状态 cart_type
$res['open_win'] = 0;
$cart_item['img'] = $GLOBALS['db']->getOne("select icon from ".DB_PREFIX."deal where id = ".$cart_item['deal_id']);
$cart_item['add_number'] = $number;
$cart_item['add_total_price'] = $number * $cart_item['unit_price'];
$cart_item['add_total_score'] = $number * $cart_item['return_score'];
$GLOBALS['tmpl']->assign("cart_item",$cart_item);
$res['html'] = $GLOBALS['tmpl']->fetch("inc/inc_cart_item.html");
$res['number'] = $GLOBALS['db']->getOne("select sum(number) from ".DB_PREFIX."deal_cart where session_id = '".es_session::id()."' and user_id = ".intval($GLOBALS['user_info']['id']));

ajax_return($res);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值