您好,欢迎来到菜鸟吧源码网-本站资源仅供学习与参考,禁止用于商业或违法行为!
  • 首 页
  • 下载APP
  • 公告:菜鸟吧APP于2024.9.15正式上线,请首页右上角进入下载,本站资源均来源于互联网及会员投稿发布,所有资源仅供学习参考研究使用,请勿商用或其它非法用途,商用请购买正版,否则产生一切后果由用户自行承担!谢谢!

     

    当前位置:主页 > 站长学堂 > ecshop >
    ecshop二次开发购物车说明
    时间:2019-10-15 14:32 作者:菜鸟哥 浏览:收藏 挑错 打印

    这篇文章主要为大家介绍了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二次开发有所帮助。

    郑重声明:
    本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
    我们不承担任何技术及版权问题,且不对任何资源负法律责任。
    如无法下载,联系站长索要。
    如有侵犯您的版权,请给我们来信:cainiaovip8@qq.com,我们尽快处理。

    修改ECSHOP评论表单中的Email为非必填的教程修改ECSHOP评论表单中的Email为非必填
    介绍ecshop中如何添加限时抢购功能介绍ecshop中如何添加限时抢购功能
    ecshop数据库ecs_stats短时间内会变很大的解决方案ecshop数据库ecs_stats短时间内会变很