ecshop二次开发之购物车分析
本文实例讲述了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();
具体更改代码部分:
{
$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)
{
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();
之后增加如下代码
$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二次开发有所帮助。
相关文章
- ecshop 二次开发 加入用户定制商品类型的方法,需要的朋友可以参考下2012-07-30
ecshop二次开发 购物时为每件商品添加备注信息的修改方法
ecshop二次开发 购物时为每件商品添加备注信息的修改方法,需要的朋友可以参考下。2011-08-22- Ecshop想必大家不会觉得陌生吧,大部分的B2C独立网店系统都用的是Ecshop系统,很受用户的喜爱,但是由于Ecshop模板自带有很多Ecshop的Logo和版权信息,和一些其他需要修改2014-03-01
- 这篇文章主要为大家介绍了ecshop二次开发之常用函数,汇总并说明了ecshop二次开发中常用的函数及其对应的功能,具有很好的参考价值,需要的朋友可以参考下2014-11-19
- ecshop调用指定分类的文章在网站中比较常用.下面来给朋友来介绍一下方法,参考一下不错的2012-05-21
ECSHOP安装数据库失败date_default_timezone_get()问题
今天在倒腾ECSHOP时遇到的问题,以向导模式安装时遇到具体的PHP警告如下2012-01-08- 在我第一次安装ecshop时失败了。提示遇到安装数据失败。并报出警告。2011-03-02
- ECSHOP2.7版本的底部版权对于优化与安全都不是很好,所以好多朋友都想给删除了,下面的具体的方法,都是加密过的所有不容易简单的搜索.需要的朋友可以参考下。2010-01-24
ecshop 后台登陆自动退出的一种可能情况(目录大小写问题)
某客户的ecshop后台登陆后,显示成功,但是自动退出到登陆界面,经排查时因为目录大小写问题2012-03-26- 首先声明个人观点:不建议大家去除别人的版权,请尊重知识产权,特别是这样好的系统。2010-01-24
最新评论