一、匿名用户的购物车和登录会员购物车
ecshop的购物车机制,当用户打开网站时会在session表产生一条seesion,登陆时更新这条seession。此时如果用户将商品添加至购物车,就会在cart表中添加以session_id为Id的商品数据。而用户退出登录时系统会调用destroy_session()函数,清购物车。函数部分如下:(cls_session.php文件中)
function destroy_session()
{ .此处省略部分代码
$this->db->query('DELETEFROM ' . $GLOBALS['ecs']->table('cart') . " WHEREsession_id ='$this->session_id'“ );
此处省略部分代码
}
所以此时退出购物车就被清空了,下面是本人的解决方法:
说说思路:
Author:梦中的期待*/
Author:梦中的期待*/
Author:梦中的期待*/
Author:梦中的期待*/
具体实现代码:
1.cls_session.php
function destroy_session()
{ .此处省略部分代码
Author:梦中的期待*/
$this->db->query('DELETEFROM ' . $GLOBALS['ecs']->table('cart') . " WHEREsession_id = '$this->session_id' AND user_id=''");
此处省略部分代码}
2.lib.main.php
function update_user_info()
{ 些处省略函数原来代码,直接跳到函数最后,加上如下代码:
Author:梦中的期待*/
$sql ="update ".$GLOBALS['ecs']->table('cart')." setuser_id =".$_SESSION['user_id']." where session_id ='".SESS_ID."'";
$GLOBALS['db'] -> query($sql);
Author:梦中的期待*/
$sql1 ="update ".$GLOBALS['ecs']->table('cart')." setsession_id ='".SESS_ID."' where user_id ='".$_SESSION['user_id']."'";
$GLOBALS['db'] -> query($sql1);
Author:梦中的期待*/
$sql2="select distinct(c.goods_id)from".$GLOBALS['ecs']->table('cart')."as c leftjoin"
.$GLOBALS['ecs']->table('goods')."as g onc.goods_id=g.goods_id where g.is_on_sale =0 AND c.user_id ='".$_SESSION['user_id']."'";
$data =$GLOBALS['db'] -> getAll($sql2);
if($data){
foreach($data as $k=>$v){
$sql="deletefrom".$GLOBALS['ecs']->table('cart')."where goods_id= '".$v['goods_id']."'";
$GLOBALS['db'] -> query($sql);
}}}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////分隔线
补充:发现一个BUG
在privilege.php中发现一个functionclear_cart()用于清理cart中无效的数据的,难怪购物车的商品,session一过期就没有了!~
既然我们不需要定期清cart中的无效数据,这个function其实就没有用了,但我们改一下,可以用来清理己下架的商品,这样上面.lib.main.php文件中的清理下架商品的部分就可以删除了!~
修改后的function如下:
function clear_cart()
{
//删除cart中无效的数据
//$sql ="DELETE FROM " . $GLOBALS['ecs']->table('cart').
// " WHERE session_id NOT " .db_create_in($valid_sess);
//$GLOBALS['db']->query($sql);
$sql2="select distinct(c.goods_id)from".$GLOBALS['ecs']->table('cart')."as c leftjoin"
.$GLOBALS['ecs']->table('goods')."as g onc.goods_id=g.goods_id where g.is_on_sale =0 AND c.extension_code=''";
//.$GLOBALS['ecs']->table('goods')."as g onc.goods_id=g.goods_id ";
$data = $GLOBALS['db'] -> getAll($sql2);
print_r($data);
if($data){
foreach ($data as $k=>$v){
$sql="deletefrom".$GLOBALS['ecs']->table('cart')."where goods_id= '".$v['goods_id']."'";
$GLOBALS['db'] ->query($sql);
}
}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。