首页 > 电脑专区 > CMS教程 > ecshop >

ecshop二次开发之购物车分析

来源:互联网 2023-03-14 12:48:48 440

本文实例讲述了ecshop二次开发之购物车分析。分享给大家供大家参考。具体分析如下:WgC办公区 - 实用经验教程分享!

一、保存用户购物车数据WgC办公区 - 实用经验教程分享!

ECSHOP的购物车数据,是以Session 方式存储在数据库里,并在Session结束后 ,Distroy 掉,解决方法是:WgC办公区 - 实用经验教程分享!

1.购物车内容读取方式. 更改登陆后购物车获取条件 "Session 单独方式"为 Session 用户名 ,该修改位于Lib_order 下 function get_cart_goods();WgC办公区 - 实用经验教程分享!

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

3.更改退出时,自动Clear Cart的部分,将Distroy 当前Session 的内容,更改为Distroy 当前Session 下 User ID为0的部分。 该修改位于:Includes/cls_session.php , function destroy_session() 部分WgC办公区 - 实用经验教程分享!

说明:这种情况下就是游客关闭浏览器后,购物车清空, 注册用户购物车永久保存, 可能会对服务器造成轻微压力,主要取决于用户的数量,如果数量较多数据服务器压力较大,可以通过程序,自动清理超过一定时间段未登陆的User Cart (或者是额外增加一个数据,来标示加入购物车的时间,根据此时间判断是否自动清理).WgC办公区 - 实用经验教程分享!

二、读取购物车数据WgC办公区 - 实用经验教程分享!

1.购物车内容读取方式. 更改登陆后购物车获取条件 "Session 单独方式"为 Session 用户名 ,该修改位于Lib_order 下 function get_cart_goods();WgC办公区 - 实用经验教程分享!

具体更改代码部分:复制代码代码如下: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);//........后面不变WgC办公区 - 实用经验教程分享!

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; $icount($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就行了WgC办公区 - 实用经验教程分享!

希望本文所述对大家的ecshop二次开发有所帮助。WgC办公区 - 实用经验教程分享!

以上方法由办公区教程网编辑摘抄整理自互联网可供大家参考!WgC办公区 - 实用经验教程分享!


标签: 二次开发ECShop

办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码