您现在的位置是:首页 > cms教程 > Ecshop商城教程Ecshop商城教程
ecshop修改处理用户购物车的行为的方法
沛珊2025-01-06Ecshop商城教程已有人查阅
导读Ecshop v2.7.3的购物车处理方面在现在看来有比较反用户体验的设计:用户未登录时加入购物车的商品,在用户登录后会被清空而不是加入到登录用户的购物车中;
Ecshop v2.7.3的购物车处理方面在现在看来有比较反用户体验的设计:用户未登录时加入购物车的商品,在用户登录后会被清空而不是加入到登录用户的购物车中;
用户登录后加入购物车的商品,在退出后会被清空。
这两种设计在现在看来简直不可理喻,对用户极不友好,作为一个以流量至上的商城,这样的设计会导致客户的流失。
查看源码才发现,ecshop是以session_id作为保存购物车商品的依据,而不是用户id。个人认为这样的设计是由于其以下单为主,用户有没有注册都可以直接下单,这样就导致其整套逻辑以"会话”为主体。
修改ecshop购物车行为,使其以客户为主,具体设计是:
用户登录后加入购物车的商品,退出后依然保留;
用户未登录时加入购物车的商品:
如果用户登录,则合并到客户的购物车中;
如果未登录即关闭,则保存到cookie中一段时间(ecshop本身已实现)
策略:
1.登录前用session_id,登录后用user_id查看,操作购物车数据;
2.用户登录后,更新合并购物车数据;
3.用户登出后,依然有无主商品的话,删除。
lib_main.php添加。
cls_session.php修改函数
1 update_user_info(); //更新用户信息
2 /*如果用户已登录且其在未登录时将商品加入了购物车,那么将未登录时的购物车与用户之前的购物车商品合并*/
3 update_user_cart();//新加上
4 recalculate_price(); // 重新计算购物车中的商品价格
flow.php , lib_insert.php,lib_main.php,lib_order.php , lib_transaction.php ,order.php 等内容中的 session_id='".SESS_ID."'"改为 rec_select();
测试看看。
用户登录后加入购物车的商品,在退出后会被清空。
这两种设计在现在看来简直不可理喻,对用户极不友好,作为一个以流量至上的商城,这样的设计会导致客户的流失。
查看源码才发现,ecshop是以session_id作为保存购物车商品的依据,而不是用户id。个人认为这样的设计是由于其以下单为主,用户有没有注册都可以直接下单,这样就导致其整套逻辑以"会话”为主体。
修改ecshop购物车行为,使其以客户为主,具体设计是:
用户登录后加入购物车的商品,退出后依然保留;
用户未登录时加入购物车的商品:
如果用户登录,则合并到客户的购物车中;
如果未登录即关闭,则保存到cookie中一段时间(ecshop本身已实现)
策略:
1.登录前用session_id,登录后用user_id查看,操作购物车数据;
2.用户登录后,更新合并购物车数据;
3.用户登出后,依然有无主商品的话,删除。
lib_main.php添加。
1 /**
2 * 选择购物车商品的获取条件
3 * Desc: 如果已登录,返回user_id条件,否则返回session_id条件
4 * @access public
5 * @return where condition
6 */
7 function rec_select()
8 {
9 return (isset($_SESSION['user_id'])&&intval($_SESSION['user_id'])>0)?"user_id= ".intval($_SESSION['user_id'])." ":"session_id = '" . SESS_ID . "' ";
10 }
11
12 /**
13 * 更新购物车中的商品
14 * Desc: 如果用户已登录且其在未登录时将商品加入了购物车,那么将未登录时的购物车与用户之前的购物车商品合并
15 * @access public
16 * @return boolean
17 */
18 function update_user_cart()
19 {
20 if(!isset($_SESSION['user_id']))
21 return FALSE;
22
23 /*查看是否有未登录时加入购物车的商品*/
24 $sql = "SELECT *, IF(parent_id, parent_id, goods_id) AS pid " .
25 " FROM " . $GLOBALS['ecs']->table('cart') . " " .
26 " WHERE session_id = '" . SESS_ID . "' AND user_id=0 AND rec_type = '" . CART_GENERAL_GOODS . "'" .
27 " ORDER BY pid, parent_id";
28 $res = $GLOBALS['db']->query($sql);
29
30 $_uid=intval($_SESSION['user_id']);
31
32 while ($row = $GLOBALS['db']->fetchRow($res))
33 {
34 if($_uid>0)
35 {
36 /* 检查该商品是否已经存在在购物车中 */
37 $sql="SELECT * FROM {$GLOBALS['ecs']->table('cart')} WHERE user_id={$_uid} AND goods_id={$row['goods_id']} AND rec_type = '" . CART_GENERAL_GOODS."'
38 AND goods_attr='{$row['goods_attr']}'
39 AND goods_attr_id={$row['goods_attr_id']}
40 AND product_id={$row['product_id']}
41 AND parent_id={$row['parent_id']}
42 AND is_gift={$row['is_gift']}
43 AND is_shipping={$row['is_shipping']}
44 ";
45 $_one=$GLOBALS['db']->getOne($sql);
46
47 if(!empty($_one))
48 {
49 $goods_number=$_one['goods_number']+$row['goods_number'];
50 $sql="UPDATE {$GLOBALS['ecs']->table('cart')} SET goods_number = {$goods_number} WHERE rec_id = {$_one['rec_id']}";
51 $GLOBALS['db']->query($sql);
52
53 $sql="DELETE FROM {$GLOBALS['ecs']->table('cart')} WHERE rec_id = {$row['rec_id']}";
54 $GLOBALS['db']->query($sql);
55 }
56 else
57 {
58 $sql="UPDATE {$GLOBALS['ecs']->table('cart')} SET user_id = {$_uid} WHERE rec_id = {$row['rec_id']}";
59 $GLOBALS['db']->query($sql);
60 }
61
62 }
63 }
64 return TRUE;
65 }
核心代码cls_session.php修改函数
function destroy_session()
{
$GLOBALS['_SESSION'] = array();
setcookie($this->session_name, $this->session_id, 1, $this->session_cookie_path, $this->session_cookie_domain, $this->session_cookie_secure);
/* ECSHOP 鑷?畾涔夋墽琛岄儴鍒 */
/*
if (!empty($GLOBALS['ecs']))
{
$this->db->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '$this->session_id'");
}
*/
/*修改:只删除没有用户的购物车*/
if (!empty($GLOBALS['ecs']))
{
$this->db->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '$this->session_id' AND user_id=0");
}
/* ECSHOP 鑷?畾涔夋墽琛岄儴鍒 */
$this->db->query('DELETE FROM ' . $this->session_data_table . " WHERE sesskey = '" . $this->session_id . "' LIMIT 1");
return $this->db->query('DELETE FROM ' . $this->session_table . " WHERE sesskey = '" . $this->session_id . "' LIMIT 1");
}
flow.php 在act=login,已登录的处理函数后;act=add_to_cart 加入购物车后,user.php action=act_login登录后加上1 update_user_info(); //更新用户信息
2 /*如果用户已登录且其在未登录时将商品加入了购物车,那么将未登录时的购物车与用户之前的购物车商品合并*/
3 update_user_cart();//新加上
4 recalculate_price(); // 重新计算购物车中的商品价格
flow.php , lib_insert.php,lib_main.php,lib_order.php , lib_transaction.php ,order.php 等内容中的 session_id='".SESS_ID."'"改为 rec_select();
测试看看。
本文标签:
很赞哦! ()
图文教程
ecshop模板使用方法和机制介绍
lib_main.php中的assign_template()会设置我们的网店的公共信息及网站设置;assign_dynamic()方法则是设置该页面中的动态加载内容。当页面所需的变量设置完成后,进入smarty的display()方法。
ecshop详细页面颜色尺码等规格和库存相连动的实现方法
上一次我发表了改变商品详细页面属的样式但是在点击每个属的时候库存不根据属的改变而变化现在我们来完善它实现联动库存
ecshop后台登录频繁自动退出的解决方法
ecshop后台登录后,有时候会自动退出,而且还会很频繁,有的是后台操作两下就莫名退出了,有的是恰好三分钟左右登出。这让管理员很恼火,严重影响了后台使用。
ecshop批量添加商品到购物车的方法
ECSHOP是一款开源的网上商店系统,在我心目中可以算得上网上商城界的Wordpress了。本文介绍如何实现在ecshop中批量添加商品到购物车。大家都知道,默认的ecshop只能单件点击
相关源码
-
(自适应)pbootcms模板五金元件气缸气动系统源码下载基于PbootCMS核心开发的气缸气动系统网站模板,为五金元件、气动设备制造企业设计。采用响应式布局技术,自动适配手机、平板等移动设备,确保各类终端用户获得良好浏览体验。查看源码 -
(PC+WAP)智能机器人人工智能物联网自动化设备源码下载本模板基于PbootCMS内核开发,为智能机器人及传感器科技企业精心设计。采用现代化设计风格,突出科技感与专业性,多方位展示企业技术实力与产品优势。查看源码 -
自适应容器设备机械行业通用pbootcms网站模板本模板是一款基于PbootCMS开源内核深度开发,为容器制造、容器设备、压力容器及相关行业量身打造的高品质响应式企业网站模板。查看源码 -
自适应APP应用程序介绍推广落地页pbootcms网站源码下载移动应用开发商设计的营销型落地页模板,基于PbootCMS内核深度开发采用前沿响应式架构,无缝适配手机端操作习惯与PC端展示需求。查看源码 -
(自适应)帝国cms7.5文章新闻博客整站源码( 带会员中心)本模板基于帝国CMS内核开发,为新闻资讯、个人博客及作品展示类网站设计。采用响应式布局技术,确保在手机、平板和电脑等不同设备上都能获得良好的浏览体验。查看源码 -
(自适应)科技产品设备技术作品pbootcms网站模板带下载和招聘基于PbootCMS内核开发的高端科技企业模板,采用响应式布局技术,适配各类移动终端设备。模板设计聚焦科技行业特性,通过模块化结构实现企业形象展示、技术成果发布与人才招募等核心需求查看源码
| 分享笔记 (共有 篇笔记) |
