首页 > 新闻动态 >  

新闻动态
NEWS

ECSHOP - 二次开辟指南---购物车篇

添加时间:2013-7-22 点击量:

第一个题目 保存用户购物车数据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__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, // 本店售价合计(无格局));


/ 轮回、统计 /


¥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__cart(¥arr)


    function flow__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__cart(¥a);}


第三项本身揣摩吧,懒得去翻那代码了,改掉SQL语句中session_id项目组为user_id就行了这里发帖真麻烦地说,两套验证...



容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
分享到: