×
  官方微博: 腾讯   新浪
ECSHOP模板 
食品保健 家居化妆 家电数码 综合通用 珠宝配饰
VIP免费模板 
家居化妆 综合通用 服装饰品 食品保健 家电数码
ECSHOP插件 
ECSHOP插件 SHOPEX插件
EC教程中心
安装使用网店运营
首页 > 二次开发教程 > ecshop红包增加”转赠”功能

帮助目录

有问必答

您可以加入我们的官方QQ群。

加入官方QQ群

可以将问题或建议反馈给我们。

提交在线客服

猜您感兴趣

ecshop红包增加”转赠”功能

网站开发中心/ 2014-11-14/ 关注人气:806

ecshop促销中使用红包激励用户购物,要想炒热活动,红包就需要有物以稀为贵的感觉。有人求有人送,这样红包之间的转赠有助于拉动第二梯队的顾客。但是如果已经把红包添加到自己的账户了怎么办?如果红包的使用再加上什么限制(比如,一个单只能用一个红包,太不人性化了),现在来做一个线上转赠红包的功能。

 

首先了解,红包存放在ecs_user_bonus表中,他的归属区分很简单:通过user_id来决定红包属于谁的。此功能涉及到四个文件:/js/user.js 、  /user.php、 /includes/lib_transaction.php 、 /themes/default/user_transaction.dwt

 

第一步:增加模板功能

 

在/themes/default/user_transaction.dwt中 {$item.status}后面添加

<!--{if $item.status == "未使用"}--><form action="/user.php" name="handsel_bonus_{$item.bonus_id}" method="post" onsubmit="return handsel_bonus_to_user(this)"><input type="hidden" name="act" value="handsel_bonus"><input type="hidden" name="bonus_id" value="{$item.bonus_id}"><input type="hidden" name="user_name" value=""><input class="btn_bom" type="submit" value="转赠"></form><!--{/if}-->

代码,然后再增加点按钮的修饰

.btn_bom{padding:5px 10px; cursor:pointer;} 

这里作用是给处于未被使用状态的红包添加转赠按钮,这里未使用状态直接用文本判断,因为在模板赋值之前已经有过逻辑处理,另外我们转增过程中也会有相应的逻辑处理,因此不会出现bug,真的想完善,也可以用语言包代替

 

第二步,前端交互增加表单验证

 

转赠信息提交的表单已经创建,现在需要做验证等相关工作,在/js/user.js中增加

 

/* *

*   赠送红包

*/

function handsel_bonus_to_user(obj){

    var username = prompt("输入你要转赠红包的账户名","");

    var msg='';

    if (username == null){return false;}

    if (username.length == 0)

  {

    msg += "用户名不能为空" + '\n';

  }

  else if (username.match(/^\s*$|^c:\\con\\con$|[%,\'\*\"\s\t\<\>\&\\]/))

  {

    msg += '用户名不合法' + '\n';

  }

  else if (username.length < 3)

  {

    msg += '用户名不合法' + '\n';

  }else{

    obj.user_name.value = username;

    return true;

  }

    alert(msg);

    return false;

}

代码,采用模式窗口接收数据

 

第三步:接收数据并处理

 

这一步开始就是核心功能方面的了,在/user.php中增加

/*赠送红包*/

elseif( $action == 'handsel_bonus'){

 

     include_once(ROOT_PATH .'includes/lib_transaction.php');

     if(isset($_REQUEST['bonus_id'])){

        $bonus_id = (int)$_REQUEST['bonus_id'];

        if(handsel_bonus_to_user($user_id, $bonus_id, $_REQUEST['user_name'])){

 

               show_message("成功转赠红包给".$_REQUEST['user_name'], $_LANG['back_up_page'], 'user.php?act=bonus', 'info');

        }else{

             $err->show($_LANG['back_up_page'], 'user.php?act=bonus');

        }

     }else{

 

          show_message("请指明要操作的红包".$_REQUEST['user_name'], '/user.php?act=bonus');

     }

 

}

 

第四步:操作数据库,

 

创建最重要的handsel_bonus_to_user函数,在/includes/lib_transaction.php文件增加函数代码

/**

 *  当前用户给指定用户赠送一个指定红包,红包会立即转向对方账号

 *

 * @access  public

 * @param   int         $user_id        用户ID

 * @param   string      $bouns_sn       红包序列号

 * @param   string      $to_user_name       红包序列号接受赠送红包的用户

 *

 * @return  boolen      $result

 */

function handsel_bonus_to_user($user_id, $bonus_id, $to_user_name)

{

    if (empty($user_id))

    {

        $GLOBALS['err']->add($GLOBALS['_LANG']['not_login']);

 

        return false;

    }

 

    /* 查询红包序列号是否已经存在 */

    $sql = "SELECT bonus_id,user_id,order_id,bonus_type_id FROM " .$GLOBALS['ecs']->table('user_bonus') .

           " WHERE bonus_id = '$bonus_id'";

    $row = $GLOBALS['db']->getRow($sql);

    if ($row)

    {

        //红包没有被用来购物

        if ($row['order_id'] == 0)

        {

 

            //红包是否属于当前用户

            if($user_id != $row['user_id']){

                $GLOBALS['err']->add('soga,你不拥有此红包');

                return false;

            }

            //红包没有被使用

            $sql = "SELECT send_end_date, use_end_date ".

                   " FROM " . $GLOBALS['ecs']->table('bonus_type') .

                   " WHERE type_id = '" . $row['bonus_type_id'] . "'";

 

            $bonus_time = $GLOBALS['db']->getRow($sql);

 

            $now = gmtime();

 

            //超出使用期限

            if ($now > $bonus_time['use_end_date'])

            {

                $GLOBALS['err']->add($GLOBALS['_LANG']['bonus_use_expire']);

                return false;

            }

 

            $sql = "select user_id from " . $GLOBALS['ecs']->table('users') ." where user_name='$to_user_name'";

            $user = $GLOBALS['db']->getRow($sql);

            if(!$user){

                $GLOBALS['err']->add('转赠的用户不存在,谢谢好心:)请重新确认用户名!');

                return false;

            }

 

$sql = "UPDATE " .$GLOBALS['ecs']->table('user_bonus') . " SET user_id = '".$user['user_id']."'  WHERE bonus_id = '$row[bonus_id]'";

            $result = $GLOBALS['db'] ->query($sql);

            if ($result)

            {

                 return true;

            }

            else

            {

                return $GLOBALS['db']->errorMsg();

            }

        }

        else

        {

           //红包被其他人使用过了。

            $GLOBALS['err']->add('红包已用来购物,不可再次使用');

            return false;

        }

    }

    else

    {

        //红包不存在

        $GLOBALS['err']->add($GLOBALS['_LANG']['bonus_not_exist']);

        return false;

    }

}

 

这样,用户之间就可以互相转赠红包了。

分享到:
下一篇:网站开发中心总结一些ecshop常用的SQL语句
上一篇:ecshop如何对文章页面浏览次数进行统计