/**
* 添加购物车
*/
public function add() {
$model_goods = M('goods');
$logic_buy = D('buy','Logic');
if (is_numeric($_GET['goods_id'])) {
//商品加入购物车(默认)
$goods_id = intval($_GET['goods_id']); //商品id
$num= intval($_GET['num']); //商品数量
if ($goods_id <= 0) return ;
//通过id获取商品的基本信息,如名称,价格,属性等(每个商城的数据库大概都是差不多的)
$goods_info = $model_goods->getGoodsInfoById($goods_id);
//抢购,这里就是对于如果商品处于抢购活动中,更新商品的价格,这里用的是传指针的方式,所以没有返回变量
$logic_buy->getGroupbuyInfo($goods_info);
//限时折扣,对于限时折扣活动,也是更新商品的价格
$logic_buy->getXianshiInfo($goods_info,$quantity);
//这里就检查库存是不是充足,有没有超拍,是不是虚拟商品或者预售商品
$this->_check_goods($goods_info,$num);
} elseif (is_numeric($_GET['bid'])) {//这里传入的是组合套餐的id号
//优惠套装加入购物车(单套)
if (!$_SESSION['member_id']) {
$this->error('请选登录');exit();
}
$bid= intval($_GET['bid']);
if ($bid<= 0) return ;
$model_bl = M('bundling');
$bl_info = $model_bl->getBundlingInfo(array('bid'=>$bid)); //这里很简单就是通过组合套餐ID吧组合套餐的信息查出来,活动是否处于开启状态
if (empty($bl_info) || $bl_info['bl_state'] == '0') {
$this->error('该优惠套装已不存在,建议您单独购买');
}
//检查每个商品是否符合条件,并重新计算套装总价
$bl_goods_list = $model_bl->getBundlingGoodsList(array('bl_id'=>$bl_id));
$goods_id_array = array();
$bl_amount = 0;
foreach ($bl_goods_list as $goods) {
$goods_id_array[] = $goods['goods_id'];
$bl_amount += $goods['bl_goods_price'];
}
$model_goods = M('goods');
$goods_list = $model_goods->getGoodsInfoById($goods_id_array);
foreach ($goods_list as $goods) {
$this->_check_goods($goods,1);
}
//优惠套装作为一条记录插入购物车,图片取套装内的第一个商品图
$goods_info = array();
$goods_info['goods_id'] = $goods_list[0]['goods_id'];
$goods_info['goods_name'] = $bl_info['bl_name'];
$goods_info['goods_price'] = $bl_amount;
$goods_info['goods_num'] = 1;
$goods_info['goods_image'] = $goods_list[0]['goods_image'];
$goods_info['store_name'] = $bl_info['store_name'];
$goods_info['bl_id'] = $bid;
$num= 1; //组合套餐中的每个商品的数量都只有一个
}
//已登录状态,存入数据库,未登录时,存入COOKIE
if($_SESSION['member_id']) {
$save_type = 'db';
$goods_info['buyer_id'] = $_SESSION['member_id'];
} else {
$save_type = 'cookie';
}
$model_cart = M('cart');
$insert = $model_cart->addCart($goods_info,$save_type,$num);
if ($insert) {
//购物车商品种数记入cookie
setNcCookie('cart_goods_num',$model_cart->cart_goods_num,2*3600);
$data = array('state'=>'true', 'num' => $model_cart->cart_goods_num, 'amount' => ncPriceFormat($model_cart->cart_all_price));
} else {
$data = array('state'=>'false');
}
exit(json_encode($data));
}
/**
* 检查商品是否符合加入购物车条件
* @param unknown $goods
* @param number $quantity
*/
private function _check_goods($goods_info, $num) {
if(empty($num)) {
exit(json_encode(array('msg'=>'商品数量错误')));
}
if(empty($goods_info)) {
exit(json_encode(array('msg'=>'商品不存在')));
}
if(intval($goods_info['goods_storage']) < 1) {
exit(json_encode(array('msg'=>'商品库存不足')));
}
if(intval($goods_info['goods_storage']) < $num) {
exit(json_encode(array('msg'=>'购买数量超过库存')));
}
if ($goods_info['is_virtual'] || $goods_info['is_fcode'] || $goods_info['is_presell']) {
exit(json_encode(array('msg'=>'该商品不允许加入购物车,请直接购买','UTF-8')));
}
}
在function.php中加入两个函数
/**
* 价格格式化
*
* @param int $price
* @return string $price_format
*/
function ncPriceFormat($price) {
$price_format = number_format($price,2,'.','');
return $price_format;
}
/**
* 设置cookie
* 这个加密方式是我上一篇文章里面写了的
* @param string $name cookie 的名称
* @param string $value cookie 的值
* @param int $expire cookie 有效周期
* @param string $path cookie 的服务器路径 默认为 /
* @param string $domain cookie 的域名
* @param string $secure 是否通过安全的 HTTPS 连接来传输 cookie,默认为false
*/
function setNcCookie($name, $value, $expire='3600', $path='', $domain='', $secure=false){
if (empty($path)) $path = '/';
if (empty($domain)) $domain = SUBDOMAIN_SUFFIX ? SUBDOMAIN_SUFFIX : '';
$name = defined('COOKIE_PRE') ? COOKIE_PRE.$name : strtoupper(substr(md5(MD5_KEY),0,4)).'_'.$name;
$expire = intval($expire)?intval($expire):(intval(SESSION_EXPIRE)?intval(SESSION_EXPIRE):3600);
$result = setcookie($name, $value, time()+$expire, $path, $domain, $secure);
$_COOKIE[$name] = $value;
}
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。