ecshop二次开发之购物车分析ecshopCMS教程 - ecshop - 爱建站

爱建站,dedecms,phpcms,帝国cms,WordPress,discuz,ecshop,z-blog,UcHome,UCenter,风讯CMS,科汛cms,新云cms

SEO SEO


首页  >   ecshop > ecshop二次开发之购物车分析ecshopCMS教程  >  正文



ecshop二次开发之购物车分析ecshopCMS教程

2018-08-04 02:50:21 向站长提问 编辑: admin 阅读:




 

本文实例讲述了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();

具体更改代码部分:

复制代码
代码如下:
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二次开发有所帮助。


ecshop二次开发之购物车分析ecshopCMS教程
http://www.yuedudg.cn/article/1112881.html

 

全能
网址:
文字:
百度:
360:
神马:
文字:





Tags:






猜你喜欢



手机浏览本文
ecshop二次开发之购物车分析ecshopCMS教程

ecshop二次开发之购物车分析ecshopCMS教程




站内推荐
A
B
C
D
E
F


网站分类


标签列表


关于我们
本站主机域名成本巨大,无以为继,希望想在本站做宣传的老板可以联系我们!以维持我们网站的正常运行!感谢
联系我们: 给我发QQ消息  加入QQ群