博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ECSHOP - 二次开发指南---购物车篇
阅读量:5230 次
发布时间:2019-06-14

本文共 3059 字,大约阅读时间需要 10 分钟。

第一个问题 保存用户购物车数据ECSHOP的购物车数据,是以Session 方式存储在数据库里,并在Session结束后 ,Distroy 掉,解决方法是:

1.购物车内容读取方式. 更改登陆后购物车获取条件 "Session 单独方式"为 Session +用户名 ,该修改位于Lib_order 下 function get_cart_goods();

2. 购物车内容记录方式,未登陆方式依然是Session , 用户登陆后,自动UPdate Cart 一次,将同一UserID下购物车内数据不是当前Session的Update到当前Session , 并将当前Session 下UserID为0的部分(未登陆情况下,Userid是0),UpdateID到当前UserID ,该修改位于 Flow.php 下面function flow_update_cart($arr) 

3.更改退出时,自动Clear Cart的部分,将Distroy 当前Session 的内容,更改为Distroy 当前Session 下 User ID为0的部分。 该修改位于:Includes/cls_session.php ,     function destroy_session() 部分说明:这种情况下就是游客关闭浏览器后,购物车清空, 注册用户购物车永久保存, 可能会对服务器造成轻微压力,主要取决于用户的数量,如果数量较多数据服务器压力较大,可以通过程序,自动清理超过一定时间段未登陆的User Cart (或者是额外增加一个数据,来标示加入购物车的时间,根据此时间判断是否自动清理).

 

1.购物车内容读取方式. 

更改登陆后购物车获取条件 "Session 单独方式"为 Session +用户名 ,该修改位于Lib_order 下 function get_cart_goods();具体更改代码部分:

function get_cart_goods(){

/* 初始化 */

$goods_list = array();

$total = array(

       'goods_price'   => 0, // 本店售价合计(有格式)

       'market_price' => 0, // 市场售价合计(有格式)

       'saving'    => 0, // 节省金额(有格式)

       'save_rate' => 0, // 节省百分比

       'goods_amount' => 0, // 本店售价合计(无格式));

/* 循环、统计 */

$uid=$_SESSION['user_id']; 

if($uid==0){

$sql = "SELECT *, IF(parent_id, parent_id, goods_id) AS pid " .

         " FROM " . $GLOBALS['ecs']->table

  ('cart') . " " ." WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'" .

         " ORDER BY pid, parent_id";}else{

$sql = "SELECT *, IF(parent_id, parent_id, goods_id) AS pid " .

         " FROM " . $GLOBALS['ecs']->table('cart') . " " .

         " WHERE (user_id='".$uid."' OR session_id = '" . SESS_ID . "') AND rec_type = '" . CART_GENERAL_GOODS . "'" .         " ORDER BY pid, parent_id";}$res = $GLOBALS['db']->query($sql);

   ........后面不变

2. 购物车内容记录方式,未登陆方式依然是Session , 用户登陆后,自动UPdate Cart 一次,将同一UserID下购物车内数据不是当前Session的Update到当前Session , 并将当前Session 下UserID为0的部分(未登陆情况下,Userid是0),UpdateID到当前UserID ,该修改位于 Flow.php 

下面function flow_update_cart($arr)

    function flow_update_cart($arr)

{

foreach ($arr AS $key => $val){

       $val = intval(make_semiangle($val));

       if ($val <= 0)

       {

         continue;

       }

       $sql = "SELECT `rec_id`, `goods_id`, `goods_attr_id`, `extension_code` FROM" .$GLOBALS['ecs']->table('cart').

            " WHERE rec_id='$key' AND (session_id='" . SESS_ID . "' OR user_id='".$_SESSION['user_id']."')";

       $goods = $GLOBALS['db']->getRow($sql);// 更新购物车Session & user id

       $sql ="UPDATE " .$GLOBALS['ecs']->table('cart')." SET session_id='" . SESS_ID . "',user_id='".$_SESSION['user_id']."' where rec_id='".$goods['rec_id']."'";

       $g = $GLOBALS['db']->query($sql);

       $sql = "SELECT g.goods_name, g.goods_number ".

            "FROM " .$GLOBALS['ecs']->table('goods'). " AS g, ".

                   $GLOBALS['ecs']->table('cart'). " AS c ".

            "WHERE g.goods_id = c.goods_id AND c.rec_id = '$key'";

...........................后面不变

在用户登陆后,Flow.php打开购物车地方,需要调用一次自动更新购物车,

/* 取得商品列表,计算合计 */

$cart_goods = get_cart_goods();

之后增加如下代码for(

$i=0; 

$i<count($cart_goods['goods_list']);

$i++){

$a[$cart_goods['goods_list'][$i]['rec_id']]=$cart_goods['goods_list'][0]['goods_number'];}if(count($a)>0){flow_update_cart($a);}

第三项自己琢磨吧,懒得去翻那代码了,改掉SQL语句中session_id部分为user_id就行了这里发帖真麻烦地说,两套验证...

转载于:https://www.cnblogs.com/huidaoli/p/3205616.html

你可能感兴趣的文章
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
log4j.properties的作用
查看>>
游戏偶感
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
发布一个JavaScript工具类库jutil,欢迎使用,欢迎补充,欢迎挑错!
查看>>
discuz 常用脚本格式化数据
查看>>
洛谷P2777
查看>>
PHPStorm2017设置字体与设置浏览器访问
查看>>
SQL查询总结 - wanglei
查看>>
安装cocoa pods时出现Operation not permitted - /usr/bin/xcodeproj的问题
查看>>
makefile中使用变量
查看>>
GIT笔记:将项目发布到码云
查看>>