文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ecshop二次开发之购物车分析

2022-06-12 02:16

关注

本文实例讲述了ecshop二次开发之购物车分析。分享给大家供大家参考。具体分析如下:

一、保存用户购物车数据

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, // 本店售价合计(无格式)

);</p> <p>$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;

}</p> <p> $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']."')";</p> <p> $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就行了

希望本文所述对大家的ecshop二次开发有所帮助。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-开源
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯