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 10px ; cursor : pointer ;} |
,
这里作用是给处于未被使用状态的红包添加转赠按钮,这里未使用状态直接用文本判断,因为在模板赋值之前已经有过逻辑处理,另外我们转增过程中也会有相应的逻辑处理,因此不会出现bug,真的想完善,又有闲心的可以用语言包代替 本人一向鄙视多语言效果如下
第二步,前端交互增加表单验证
转赠信息提交的表单已经创建,现在需要做验证等相关工作,在/js/user.js中增加
4 |
function handsel_bonus_to_user(obj){ |
5 |
var username = prompt( "输入你要转赠红包的账户名" , "" ); |
7 |
if (username == null ){ return false ;} |
8 |
if (username.length == 0) |
10 |
msg += "用户名不能为空" + '\n' ; |
12 |
else if (username.match(/^\s*$|^c:\\con\\con$|[%,\'\*\"\s\t\<\>\&\\]/)) |
14 |
msg += '用户名不合法' + '\n' ; |
16 |
else if (username.length < 3) |
18 |
msg += '用户名不合法' + '\n' ; |
20 |
obj.user_name.value = username; |
代码,采用模式窗口接收数据
第三步:接收数据并处理
这一步开始就是核心功能方面的了,在/user.php中增加
2 |
elseif ( $action == 'handsel_bonus' ){ |
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' ])){ |
9 |
show_message( "成功转赠红包给" . $_REQUEST [ 'user_name' ], $_LANG [ 'back_up_page' ], 'user.php?act=bonus' , 'info' ); |
11 |
$err ->show( $_LANG [ 'back_up_page' ], 'user.php?act=bonus' ); |
15 |
show_message( "请指明要操作的红包" . $_REQUEST [ 'user_name' ], '/user.php?act=bonus' ); |
逻辑代码
第四部:操作数据库,
创建最重要的handsel_bonus_to_user函数,在/includes/lib_transaction.php文件增加函数代码
2 |
* 当前用户给指定用户赠送一个指定红包,红包会立即转向对方账号 |
5 |
* @param int $user_id 用户ID |
6 |
* @param string $bouns_sn 红包序列号 |
7 |
* @param string $to_user_name 红包序列号接受赠送红包的用户 |
9 |
* @return boolen $result |
11 |
function handsel_bonus_to_user( $user_id , $bonus_id , $to_user_name ) |
15 |
$GLOBALS [ 'err' ]->add( $GLOBALS [ '_LANG' ][ 'not_login' ]); |
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 ); |
27 |
if ( $row [ 'order_id' ] == 0) |
31 |
if ( $user_id != $row [ 'user_id' ]){ |
32 |
$GLOBALS [ 'err' ]->add( 'soga,你不拥有此红包' ); |
36 |
$sql = "SELECT send_end_date, use_end_date " . |
37 |
" FROM " . $GLOBALS [ 'ecs' ]->table( 'bonus_type' ) . |
38 |
" WHERE type_id = '" . $row ['bonus_type_id '] . "' "; |
40 |
$bonus_time = $GLOBALS [ 'db' ]->getRow( $sql ); |
45 |
if ( $now > $bonus_time [ 'use_end_date' ]) |
47 |
$GLOBALS [ 'err' ]->add( $GLOBALS [ '_LANG' ][ 'bonus_use_expire' ]); |
51 |
$sql = "select user_id from " . $GLOBALS [ 'ecs' ]->table( 'users' ) . " where user_name='$to_user_name'" ; |
52 |
$user = $GLOBALS [ 'db' ]->getRow( $sql ); |
54 |
$GLOBALS [ 'err' ]->add( '转赠的用户不存在,谢谢好心:)请重新确认用户名!' ); |
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 ); |
66 |
return $GLOBALS [ 'db' ]->errorMsg(); |
72 |
$GLOBALS [ 'err' ]->add( '红包已用来购物,不可再次使用' ); |
79 |
$GLOBALS [ 'err' ]->add( $GLOBALS [ '_LANG' ][ 'bonus_not_exist' ]); |
这样,ecshop商城用户之间就可以互相转赠红包了
- 给ecshop后台增加管理功能页面
给ecshop后台增加管理功能页面 比如我们增加一个统计报表叫做 物流费用统计报表 放在后台“报表统计”栏目中 具体操作步骤: 第一步,我们要添加一个菜单到后台,然后设置语言项,最后设置权限,这样,后 ...
- ecshop后台增加|添加商店设置选项和使用方法详解
有时候我们想在Ecshop后台做个设置.radio.checkbox 等等来控制页面的显示,看看Ecshop的设计,用到了shop_config这个商店设置功能 Ecshop后台增加|添加商店设置选项 ...
- ECSHOP 商品增加新字段的方法
在ecshop二次开发工作中,经常碰到一些ECSHOP高级使用者问我,如何给商品增加一个新字段,来录入一些新的内容. 下面我们结合ecshop后台“商品编辑”.“商品录入”来谈谈如何给ecshop商品 ...
- Ecshop 后台增加一个左侧列表菜单menu菜单的方法
Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...
- 如何Windows分页控件中增加统计功能
在我的博客里面,很多Winform程序里面都用到了分页处理,这样可以不管是在直接访问数据库的场景还是使用网络方式访问WCF服务获取数据,都能获得较好的效率,因此WInform程序里面的分页控件的使用是 ...
- ecshop后台增加模块菜单详细教程(图)
我们有时候针对ecshop如此开发,想在后台加一些菜单,最模板以前提供过教程,但是并非很系统,今天最模板抛砖引玉图文教程告诉大家:如何在ecshop后台增加模块菜单! 首先需要修改四个文件:inc_p ...
- 【PHP开源产品】Ecshop的商品筛选功能实现分析之一
一.首先,说明一下为什么要对category.php文件进行分析. 原因如下: ①个人对商城类商品筛选功能的实现比较好奇: ②对商城中关于商品的数据表设计比较感兴趣.(该功能涉及到与数据库的交互,而且 ...
- [转载]ecshop 实现订单导出功能 指定订单导出 EXCEL 数据文件
当下很多功能都觉得理所当然,但是实际作为2012年停更的ECSHOP来说,很多功能其实都是缺少的,好比今天的要说的功能 订单导出 这个功能对于现在的产品设计来说,应该属于一个比较常规的功能,但是ECS ...
- 学习ASP.NET Core Razor 编程系列九——增加查询功能
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
随机推荐
- windows 64位 dll文件 位置及python包rtree shapely安装
位置 \Windows\System32 python包依赖包安装 rtree 依赖 spatialindex(spatialindex.dll spatialindex_c.dll) shape ...
- Java Collections的排序之二
package test.list; import java.util.ArrayList; import java.util.Collections; import java.util.HashSe ...
- iOS Reachability的基本用法
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...
- 详解 ASP.NET并行,异步,多线程
最近在学习.net4以上版本新特性的时候,发现在异步这方面提供了很多好玩的.以下Mark 2篇好文,温故而知新! http://www.cnblogs.com/wisdomqq/archive/201 ...
- Silverlight Popup Bubble
控件下载地址: http://www.pudn.com/downloads217/sourcecode/others/detail1023372.html silverlight工程引入Liquid. ...
- 微信开发---------jsapi_ticket拿不到的问题。
今天代码没动,出现的问题是分享朋友圈,朋友,分享到QQ,我设置的分享链接都失效了.找来找去也不知道什么原因,没办法就只有一个个打印参数并查看文档,先把jssdk页面上的debug设置为true(微信原 ...
- 批量文本读取URL获取正常访问且保留对应IP
#coding=utf-8 import sys import requests for i in range(3000,4999,1): url = 'http://192.168.88.139:8 ...
- 数据库 CRUD
1.删除表 drop table +表名 2.修改表 alter table+表名+ add(添加)+列名+ int(类型) alter table+表名+ drop(删除)+column(列) ...
- Appium的理念
1.Appium的架构:C/S模式 Appium的核心是暴漏REST API的WebServer,appium接收来自客户端的连接请求,监听由客户端发起的命令,在移动设备上执行这些命令,这些命令的执行 ...
- 小项目:mini资源管理器【使用IO流:包含(Directory与DirectoryInfo、File与FileInfo的用法)】
主界面是这样的 1.在点击查询引发的事件时把TextBox.Text输入的目录地址加载到TreeList控件里. private void btnSelect_Click(object sender, ...