} } }

    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就行了这里发帖真麻烦地说,两套验证...



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