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}后面添加

1 <!--{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}-->

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

1 .btn_bom{padding:5px 10pxcursor:pointer;}

,

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

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

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

1 /* *
2 *   赠送红包
3 */
4 function handsel_bonus_to_user(obj){
5     var username = prompt("输入你要转赠红包的账户名","");
6     var msg='';
7     if (username == null){return false;}
8     if (username.length == 0)
9   {
10     msg += "用户名不能为空" '\n';
11   }
12   else if (username.match(/^\s*$|^c:\\con\\con$|[%,\'\*\"\s\t\<\>\&\\]/))
13   {
14     msg += '用户名不合法' '\n';
15   }
16   else if (username.length < 3)
17   {
18     msg += '用户名不合法' '\n';
19   }else{
20     obj.user_name.value = username;
21     return true;
22   }
23     alert(msg);
24     return false;
25 }

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

第三步:接收数据并处理

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

1 /*赠送红包*/
2 elseif$action == 'handsel_bonus'){
3  
4      include_once(ROOT_PATH .'includes/lib_transaction.php');
5      if(isset($_REQUEST['bonus_id'])){
6         $bonus_id = (int)$_REQUEST['bonus_id'];
7         if(handsel_bonus_to_user($user_id$bonus_id$_REQUEST['user_name'])){
8  
9                show_message("成功转赠红包给".$_REQUEST['user_name'],$_LANG['back_up_page'], 'user.php?act=bonus''info');
10         }else{
11              $err->show($_LANG['back_up_page'], 'user.php?act=bonus');
12         }
13      }else{
14  
15           show_message("请指明要操作的红包".$_REQUEST['user_name'], '/user.php?act=bonus');
16      }
17  
18 }

逻辑代码

第四部:操作数据库,

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

1 /**
2  *  当前用户给指定用户赠送一个指定红包,红包会立即转向对方账号
3  *
4  * @access  public
5  * @param   int         $user_id        用户ID
6  * @param   string      $bouns_sn       红包序列号
7  * @param   string      $to_user_name       红包序列号接受赠送红包的用户
8  *
9  * @return  boolen      $result
10  */
11 function handsel_bonus_to_user($user_id$bonus_id$to_user_name)
12 {
13     if (empty($user_id))
14     {
15         $GLOBALS['err']->add($GLOBALS['_LANG']['not_login']);
16  
17         return false;
18     }
19  
20     /* 查询红包序列号是否已经存在 */
21     $sql "SELECT bonus_id,user_id,order_id,bonus_type_id FROM " .$GLOBALS['ecs']->table('user_bonus') .
22            " WHERE bonus_id = '$bonus_id'";
23     $row $GLOBALS['db']->getRow($sql);
24     if ($row)
25     {
26         //红包没有被用来购物
27         if ($row['order_id'] == 0)
28         {
29  
30             //红包是否属于当前用户
31             if($user_id != $row['user_id']){
32                 $GLOBALS['err']->add('soga,你不拥有此红包');
33                 return false;
34             }
35             //红包没有被使用
36             $sql "SELECT send_end_date, use_end_date ".
37                    " FROM " $GLOBALS['ecs']->table('bonus_type') .
38                    " WHERE type_id = '" $row['bonus_type_id'] . "'";
39  
40             $bonus_time $GLOBALS['db']->getRow($sql);
41  
42             $now = gmtime();
43  
44             //超出使用期限
45             if ($now $bonus_time['use_end_date'])
46             {
47                 $GLOBALS['err']->add($GLOBALS['_LANG']['bonus_use_expire']);
48                 return false;
49             }
50  
51             $sql "select user_id from " $GLOBALS['ecs']->table('users') ." where user_name='$to_user_name'";
52             $user $GLOBALS['db']->getRow($sql);
53             if(!$user){
54                 $GLOBALS['err']->add('转赠的用户不存在,谢谢好心:)请重新确认用户名!');
55                 return false;
56             }
57  
58 $sql "UPDATE " .$GLOBALS['ecs']->table('user_bonus') . " SET user_id = '".$user['user_id']."'  WHERE bonus_id = '$row[bonus_id]'";
59             $result $GLOBALS['db'] ->query($sql);
60             if ($result)
61             {
62                  return true;
63             }
64             else
65             {
66                 return $GLOBALS['db']->errorMsg();
67             }
68         }
69         else
70         {
71            //红包被其他人使用过了。
72             $GLOBALS['err']->add('红包已用来购物,不可再次使用');
73             return false;
74         }
75     }
76     else
77     {
78         //红包不存在
79         $GLOBALS['err']->add($GLOBALS['_LANG']['bonus_not_exist']);
80         return false;
81     }
82  
83 }

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

为ecshop红包增加”转赠”功能的更多相关文章

  1. 给ecshop后台增加管理功能页面

    给ecshop后台增加管理功能页面 比如我们增加一个统计报表叫做 物流费用统计报表 放在后台“报表统计”栏目中 具体操作步骤: 第一步,我们要添加一个菜单到后台,然后设置语言项,最后设置权限,这样,后 ...

  2. ecshop后台增加|添加商店设置选项和使用方法详解

    有时候我们想在Ecshop后台做个设置.radio.checkbox 等等来控制页面的显示,看看Ecshop的设计,用到了shop_config这个商店设置功能 Ecshop后台增加|添加商店设置选项 ...

  3. ECSHOP 商品增加新字段的方法

    在ecshop二次开发工作中,经常碰到一些ECSHOP高级使用者问我,如何给商品增加一个新字段,来录入一些新的内容. 下面我们结合ecshop后台“商品编辑”.“商品录入”来谈谈如何给ecshop商品 ...

  4. Ecshop 后台增加一个左侧列表菜单menu菜单的方法

    Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...

  5. 如何Windows分页控件中增加统计功能

    在我的博客里面,很多Winform程序里面都用到了分页处理,这样可以不管是在直接访问数据库的场景还是使用网络方式访问WCF服务获取数据,都能获得较好的效率,因此WInform程序里面的分页控件的使用是 ...

  6. ecshop后台增加模块菜单详细教程(图)

    我们有时候针对ecshop如此开发,想在后台加一些菜单,最模板以前提供过教程,但是并非很系统,今天最模板抛砖引玉图文教程告诉大家:如何在ecshop后台增加模块菜单! 首先需要修改四个文件:inc_p ...

  7. 【PHP开源产品】Ecshop的商品筛选功能实现分析之一

    一.首先,说明一下为什么要对category.php文件进行分析. 原因如下: ①个人对商城类商品筛选功能的实现比较好奇: ②对商城中关于商品的数据表设计比较感兴趣.(该功能涉及到与数据库的交互,而且 ...

  8. [转载]ecshop 实现订单导出功能 指定订单导出 EXCEL 数据文件

    当下很多功能都觉得理所当然,但是实际作为2012年停更的ECSHOP来说,很多功能其实都是缺少的,好比今天的要说的功能 订单导出 这个功能对于现在的产品设计来说,应该属于一个比较常规的功能,但是ECS ...

  9. 学习ASP.NET Core Razor 编程系列九——增加查询功能

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

随机推荐

  1. windows 64位 dll文件 位置及python包rtree shapely安装

    位置 \Windows\System32 python包依赖包安装 rtree 依赖 spatialindex(spatialindex.dll   spatialindex_c.dll) shape ...

  2. Java Collections的排序之二

    package test.list; import java.util.ArrayList; import java.util.Collections; import java.util.HashSe ...

  3. iOS Reachability的基本用法

    #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...

  4. 详解 ASP.NET并行,异步,多线程

    最近在学习.net4以上版本新特性的时候,发现在异步这方面提供了很多好玩的.以下Mark 2篇好文,温故而知新! http://www.cnblogs.com/wisdomqq/archive/201 ...

  5. Silverlight Popup Bubble

    控件下载地址: http://www.pudn.com/downloads217/sourcecode/others/detail1023372.html silverlight工程引入Liquid. ...

  6. 微信开发---------jsapi_ticket拿不到的问题。

    今天代码没动,出现的问题是分享朋友圈,朋友,分享到QQ,我设置的分享链接都失效了.找来找去也不知道什么原因,没办法就只有一个个打印参数并查看文档,先把jssdk页面上的debug设置为true(微信原 ...

  7. 批量文本读取URL获取正常访问且保留对应IP

    #coding=utf-8 import sys import requests for i in range(3000,4999,1): url = 'http://192.168.88.139:8 ...

  8. 数据库 CRUD

    1.删除表 drop  table +表名 2.修改表 alter  table+表名+ add(添加)+列名+ int(类型) alter  table+表名+ drop(删除)+column(列) ...

  9. Appium的理念

    1.Appium的架构:C/S模式 Appium的核心是暴漏REST API的WebServer,appium接收来自客户端的连接请求,监听由客户端发起的命令,在移动设备上执行这些命令,这些命令的执行 ...

  10. 小项目:mini资源管理器【使用IO流:包含(Directory与DirectoryInfo、File与FileInfo的用法)】

    主界面是这样的 1.在点击查询引发的事件时把TextBox.Text输入的目录地址加载到TreeList控件里. private void btnSelect_Click(object sender, ...