ECSHOP -> 二次开发指南帖

2016-07-07 14:56 来源:www.chinab4c.com 作者:ecshop专家

临时接了个网站任务,其中有一部分就是关于ECSHOP二次开发作为网站商城频道的,受限于服务细则,就不公布具体的开发接过了,不过其中一部分关于ECSHOP普遍需求较多,并且我已经解决掉的,可以公开自己的思路,有一定编程能力的站长可以自己尝试动手,我会写得尽量详细。能力差些的站长,如果有一些共性的问题,也可以提出来,如果是我解决过的,可以贴出部分修改代码,或者是给出具体解决方法。

对于大家的问题,我会尽量上来看,并针对较多的问题,及时回复。有需要的可以PM或者MSN Q之类的联系,但我们是一家在北京的工作室,所以对于希望低价或者免费获取高质量服务的,另寻他途,呵呵,没办法,北京这地方,生存压力太大了。

好了,废话不多说, 下面贴一个比较常遇到的问题,就是关闭浏览器后,用户的购物车数据就丢失的问题。先贴出解决方案,详细代码,过几天有时间了整理出来再贴。

回答:
第一个问题 保存用户购物车数据

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 (或者是额外增加一个数据,来标示加入购物车的时间,根据此时间判断是否自
动清理).



此贴必火!
广告出租!

此贴很火~~~ 留名

谢谢分享。

赶紧占个位置

占个位置

占位学习ing

路过,只能看看。对于新手,是没任何用处了。对于高手,这些又不需要。

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就行了

这里发帖真麻烦地说,两套验证...

谢谢共享, 发帖量超过10好像就没有验证了,