广告投放

ECSHOP优惠卷红包增加转赠/赠送功能

目录

    ecshop促销中使用红包激励用户购物,要想炒热活动,红包就需要有物以稀为贵的感觉。有人求有人送,这样红包之间的转赠有助于拉动第二梯队的顾客。但是如果已经把红包添加到自己的账户了怎么办?

    如果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$|[%,'*"st<>&\]/))
    {
    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)
    {
    29  
    //红包是否属于当前用户
    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;
    }
    }

    红包优惠卷赠送功能增加完毕,大家赶紧测试下吧!

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

    给TA打赏
    共{{data.count}}人
    人已打赏
    广告位招租919838898
    0 条回复 A文章作者 M管理员
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    有新私信 私信列表
    搜索