电子商城加入购物车的设计流程

1.判断用户是否登录,如果用户登录采用Db存储商品(即采用数据库的方式存购物车中的商品),如果是用户未登录(即采用Cookie的方式存购物车中的商品,并且采用加密方式)

2.用户在点击购买按钮的时候,有可能是买的是单品,也有可能买的是组合套餐。从而得到点击按钮传过来的参数要么是商品的id,要么就是组合套餐的id号,同时带有商品数量。

3.对于单品来说,先判断商品此时是否处于促销时间,所以通过id首先得判断是否是促销产品,更新商品价格,然后在判断是否是限时折扣,再次更新商品价格,最后再检查库存是不是为空,购买的数量是否大于库存。对于一些虚拟产品、如F码、预售产品最好不要加入在购物车中(因为这些要么是可以直接发货,要么是需要过一段时间才能发货,对于这类产品建议直接购买,禁止加入购物车中)。

4.对于组合套餐来说,需要判断此时商品是否在组合套装中,在判断组合套餐中的每个商品是否有库存,计算组合套餐的总价格,加入购物车的时候只放组合套餐的一个商品在购物车中,同时把组合套餐id放进去,方便以后再购物车页面把组合套餐中的其他商品查询出来。

实例:/**

* 添加购物车

*/

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'])

exit(json_encode(array('msg'=>'商品库存不足')));

}

if(intval($goods_info['goods_storage'])

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;

}

php商城拍卖逻辑,thinkphp商城购物车逻辑思路相关推荐

  1. 商城文档、商城原型、全局说明、o2o商城、汽车商城、业务逻辑、商城架构图、流程图、版本规划、需求说明、活动、预约、会员、prd、交互说明、页面说明、显示规则、字段说明、操作规则、数据来源、需求规划

    商城文档.商城原型.全局说明.o2o商城.汽车商城.业务逻辑.商城架构图.流程图.版本规划.需求说明.活动.预约.会员.prd.交互说明.页面说明.显示规则.字段说明.操作规则.数据来源.需求规划 A ...

  2. web电商、商城pc端、商城、购物车、订单、线上支付、web商城、pc商城、登录注册、人工客服、收货地址、现金券、优惠券、礼品卡、团购订单、评价晒单、消息通知、电子产品商城、手机商城、电脑商城

    web电商.商城pc端.商城.购物车.订单.线上支付.web商城.pc商城.登录注册.人工客服.收货地址.现金券.优惠券.礼品卡.团购订单.评价晒单.消息通知.电子产品商城.手机商城.电脑商城 Axu ...

  3. php实现商城购物车的思路以及源码分析

    这篇文章主要介绍了php实现商城购物车的思路和源码分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着快搜小编来一起学习学习吧 AI 本文介绍一个ph ...

  4. Android商城开发----点击加入购物车,购物车商品的增删减

    Android商城开发----点击加入购物车,购物车商品的增删减 上一章节:[分类页面]点击左侧类别,实现右侧对应类别商品的展示 本文是在上一章节基础上开发的,点击[分类]页面商品的加入购物车按钮,实 ...

  5. 购物车及商品php代码_php实现商城购物车的思路和源码分析

    本文介绍一个php实现的购物车代码,功能实现完整,具有一定的参考价值 这里我们为你提供个简单的php购物车代码,从增加购物产品与发生购买了,在商城开发中,这个功能是少不了的 具体分析如下: 对购物车里 ...

  6. 淘淘商城简介——淘淘商城

    电商简介 淘淘商城简介 功能模块 技术架构的对比 传统架构 分布式架构 技术选型 工程总览 数据库 服务层 交互 开发过程目录 部署 项目源码 电商简介 技术特点: 技术新 技术范围广 分布式 高并发 ...

  7. 谷粒商城-分布式高级篇[商城业务-秒杀服务]

    谷粒商城-分布式基础篇[环境准备] 谷粒商城-分布式基础[业务编写] 谷粒商城-分布式高级篇[业务编写]持续更新 谷粒商城-分布式高级篇-ElasticSearch 谷粒商城-分布式高级篇-分布式锁与 ...

  8. java商城_基于Java,jfinal web框架开发出微信商城,微信分销商城源码分享

    项目简介: 专门针对微信服务号开发的一套微信商城,微信分销商城,支持商品多规格,支持按地区设置邮费,支持限时打折,订单返现,满减送,满包邮,支持订单打印,订单打印模板自定义,发货单打印,发货单打印模板 ...

  9. likeshop100%开源免费商用电商系统,PC商城、H5商城、小程序商城、安卓APP商城、苹果APP商城全部100%开源,免费商用

    简介: 怎样是适合 能够通过开发文档部署文档,这是唯一的能力要求,上手非常简单.流畅. 使用宝塔部署,即可快速搭建PC商城.小程序商城.公众号H5商城.安卓APP.苹果APP. 如果你具备开发能力,也 ...

  10. 直播商城源码,商城开发实现商城底部导航栏

    直播商城源码,商城开发实现商城底部导航栏 1.先写布局. 我新建了一个ShoppingActivity,在activity_shopping.xml文件中,写整体布局,代码如下: <?xml v ...

最新文章

  1. 前端遍历导致查询数据时间过长_OLAP 服务器,空间换时间可行吗?
  2. solr文档索引最佳实践
  3. uva 1557 - Calendar Game(博弈)
  4. cmake 安装_vscode不写一行配置,用cmake傻瓜式搭建C++编译调试环境
  5. Java局部变量一定要赋初值
  6. [Robot Framework] 怎么做数学运算?
  7. [2021-CVPR] Fine-grained Angular Contrastive Learning with Coarse Labels 论文简析
  8. Ajax(从json中提取数据)
  9. 2020 年 Go 语言盘点:Go 的前进步伐不可阻挡
  10. Axure8.0激活码
  11. halcon识别斜着的车牌
  12. GPRS核心网-GTP-C协议解析
  13. 大数据影响下的专题地图编制
  14. Unity Monetization 3.0 部分接入文档内容
  15. Butterfly主题背景魔改
  16. (一)1.线性规划 之 化标准型和图解法
  17. linux多进程和多线程分析之一
  18. Android开发之自定义View之音阶图谱
  19. (四) 开集识别学习 open-set recognition(OSR)
  20. 高通Q+A Virtio hypervisor touch框架介绍(share-device)

热门文章

  1. Python设置显示屏分辨率
  2. php商店管理系统,基于PHP的商店管理系统.doc
  3. java中 移位运算符_java中的移位运算符心得总结
  4. CommandName 限制
  5. C++在windows下获得运行主机的硬件信息:CPU序列号、MAC地址、硬盘序列号、主板序列号
  6. 英语学渣如何看懂全英文的芯片数据手册
  7. idea设置java环境变量_idea的环境变量怎样设置
  8. 在 iOS 设备上安装和使用 OpenSSH
  9. Java正则表达式语法规则(具体)
  10. 2020的另一面:5G的斯普特尼克之年