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

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商城用户之间就可以互相转赠红包了

时间: 2024-10-27 06:20:35

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

ecshop如何增加多个产品详细描述的编辑器

在做商产品详情的时候,经常会有选项卡类似的几个产品说明,如:商品详情,商品规格,参数列表,售后服务等. Ecshop后台里面默认只有一个编辑框(器),那么我们还得自己添加几个,以下是ecshop如何增加产品描述编辑器个数的步骤: 1)在数据库的表esc_goods里增加二个text的字段用来存储新增的二个编辑框的内容, 如:goods_desc2,goods_desc3(可以用phpmyadmin) 2)修改生成编辑器的函数 找到 /admin/includes/lib_main.php 文件

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

我们有时候针对ecshop如此开发,想在后台加一些菜单,最模板以前提供过教程,但是并非很系统,今天最模板抛砖引玉图文教程告诉大家:如何在ecshop后台增加模块菜单! 首先需要修改四个文件:inc_priv.php,inc_menu.php,priv_action.php,commn.php 1.首先打开language\zh_cn\admin\commn.php 假如当前的项要加在商品管理的菜单下 在其下面加入如代码: Php代码   $_LANG['77_goods_export'] = '

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

在我的博客里面,很多Winform程序里面都用到了分页处理,这样可以不管是在直接访问数据库的场景还是使用网络方式访问WCF服务获取数据,都能获得较好的效率,因此WInform程序里面的分页控件的使用是很好的一个解决方式,它能够快速获取数据,并将可能减少我们增加太多的代码逻辑,实现简单.高效.统一的理念.本篇主要介绍如何在分页的GridControl里面如何实现数据的统计功能. 一般情况下,分页控件呈现分为两种方式,一种需要有分页码的真正分页处理,一种是不需要分页处理,但是列表和功能基本保持一致的

ECSHOP分类页面筛选功能(按分类下子分类和品牌筛选)

其实分类页面里面本来就有相关的品牌.属性.分类的筛选功能在category.php和模板加上相应的功能即可 1.读出当前分类的所有下级分类 $chlidren_category = $GLOBALS['db']->getALl('SELECT cat_id,cat_name FROM ' . $GLOBALS['ecs']->table('category') ." WHERE parent_id = '$cat_id' and is_show=1"); $category

python 之装饰器(用装饰器给现有函数增加新功能)

#!/usr/bin/env python # -*- coding: utf-8 -*- """ Created on Mon Nov 14 01:01:29 2016 @author: toby """ #知识点:装饰器 ''' #一.小粒子: #要求1.假如产品经历要求在每个函数之上执行之前都添加一个验证的功能,当然这里只是模拟而已,别当真哈! #已写好的现有函数如下,有1000个函数 def func1():     print 'fun

自动升级系统的设计与实现(续2) -- 增加断点续传功能 (附最新源码)

一.缘起 之前已经写了两篇关于自动升级系统OAUS的设计与实现的文章(第一篇.第二篇),在为OAUS服务端增加自动检测文件变更的功能(这样每次部署版本升级时,可以节省很多时间,而且可以避免手动修改带来的错误)后,有部分使用者又提出了一个很好的建议:为OAUS增加断点续传功能.因为如果网络状态不是很好,就经常会在升级到一半的时候,由于OAUS客户端掉线而导致升级失败,这个时候,就必须重新开始整个升级过程.即使升级中断的时候,已经完成了99%,也必须重头再来.所以,为OAUS增加断点续传功能是非常必

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

Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages/zh_cn/admin/common.php 1.在/admin/includes/inc_menu.php中增加$modules['03_promotion']['16_progoods_list']        = 'progoods.php?act=list'; 前面03_promotio

Eclipse rcp 开发 : 自定义导航视图CNF(3)为导航视图增加隐藏文件功能

org.eclipse.ui.navigator.navigatorContent 右键新增commonFilter id:  唯一 name :名称 如:*.xml resources description:描述, 如:Hides *.xml resources 在该属性下载增加属性:其中的value为通配xml  <filterExpression>             <and>                <adapt                     

Ecshop的商品筛选功能实现分析之一(主要对category.php进行分析)

一.首先,说明一下为什么要对category.php文件进行分析. (1)原因如下: ①个人对商城类商品筛选功能的实现比较好奇: ②对商城中关于商品的数据表设计比较感兴趣.(该功能涉及到与数据库的交互,而且与数据库中数据表的设计好坏有一定的联系): ③多条件(属性)筛选功能在现今的很多网站都需要用到,很广泛(如:一般商城网.团购网.房产网.信息分类网站等等). (2)希望达到的目的是: ①能够对多条件筛选功能有一个初步的认识.(起码自己做,也能够快速实现吧): ②对多条件筛选的实现中,数据库该如