您现在的位置是:首页 > cms教程 > Ecshop商城教程Ecshop商城教程
ecshop红包转赠功能实现方法
恨天2024-12-22Ecshop商城教程已有人查阅
导读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}后面添加
第二步,前端交互增加表单验证
转赠信息提交的表单已经创建,现在需要做验证等相关工作,在/js/user.js中增加
第三步:接收数据并处理
这一步开始就是核心功能方面的了,在/user.php中增加
第四部:操作数据库,
创建最重要的handsel_bonus_to_user函数,在/includes/lib_transaction.php文件增加函数代码
最模板简单的实现一下:
首先了解,红包存放在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商城用户之间就可以互相转赠红包了。
本文标签:
很赞哦! ()
上一篇:ecshop修改模板记录
相关教程
- discuz的ecshop的伪静态规则apache+nginx
- ecshop整合discuz的方法
- discuz和ecshop截取字符串函数介绍
- ECShop2.7.2整合Discuz 6.0论坛的步骤方法
- Ecshop和Discuz开源产品有哪些局限性
- ecshop怎么和discuz整合
- phpcmsv9和ecshop2.3.7以及discuzx3.0整合方法
- Nginx常用Rewrite(伪静态规则)WordPress/PHPCMS/ECSHOP/ShopEX/S
- ecshop收货地址199/198号段提示手机号格式不正确!
- ecshop调用商品属性的方法实例
- ecshop支付插件开发教程
- ecshop商品怎么增加新字段
图文教程
ecshop订单付款之后向用户客户发送订单信息确认邮件
要实现这个功能,就要修改ECshop的程序文件:\includes\lib_payment.php,打开该文件,找到166行左右,在”如果需要,发短信”的代码下面,插入以下的代码:
ecshop首页商品显示商品货号的实现方法
ecshop首页有很多种商品,包括今日特价、精品推荐、新品上市、热卖商品、分类商品等,这里只讲解在“精品推荐、新品上市、热卖商品”三个栏目的商品下面显示商品货号的方法。
ecshop二次开发秒杀、限时折扣、 等功能实现方法
1,先在后台admin/templates 中找goods_info.htm文件到促销部分,改为一个下拉列表的分别是促销,限时,秒杀,值分别是1,2,3
ecshop适应PHP7的实现方法
说实话,ecshop这个系统,到目前也没见怎么推出新版本,如果是新项目,不太建议使用它。不过,因为我一直以来都在使用中,所以不得不更改让其适应PHP新版本。
相关源码
-
(PC+WAP)生活资讯百科新闻门户类pbootcms网站模板为生活资讯、百科门户类企业打造的高性能网站模板,基于PbootCMS开源内核开发,采用HTML5响应式架构,PC与手机端实时数据同步,覆盖全终端用户浏览场景。查看源码 -
(PC+WAP)绿色市政园林建筑设计绿化营销型pbootcms网站模板本模板基于PbootCMS系统开发,为园林绿化、景观设计类企业设计,特别适合市政园林、景观工程、绿化养护等企业使用。采用双端适配技术查看源码 -
帝国cms7.5个人博客资讯文章模板下载本模板简洁个人博客网站设计开发,采用帝国CMS内核构建,只需替换文字图片即可快速搭建专业网站。自适应手机端设计,数据实时同步,操作简单便捷。PHP程序确保安全稳定运行,帮助您以较低成本获取持续业务。查看源码 -
(自适应响应式)个人作品技术文章博客网站模板下载基于PbootCMS内核开发的响应式博客模板,为数字营销、技术分享类内容打造。采用前沿设计理念,兼顾内容展示与阅读体验,适配各类终端设备。通过本模板可快速构建专业级行业博客,有效传播专业知识与案例成果。查看源码 -
(自适应响应式)pbootcms紫色美容整形机构企业模板下载基于PbootCMS内核开发的响应式网站模板,为医疗美容机构、整形医院等企业设计,提供完整的线上展示平台采用紫色系配色方案,整体风格专业大气。模板包含首页轮播、服务项目、专家团队、案例展示等核心模块,能够充分展示医疗美容机构的专业服务和特色优势。查看源码 -
(PC+WAP)蓝色玻璃纤维制品环保设备营销型pbootcms模板源码下载这是一款针对玻璃纤维行业特点设计的网站模板,采用蓝色系配色方案,体现工业感和环保理念。模板包含产品中心、应用案例、技术支持和新闻动态等核心模块,能够全面展示玻璃纤维制品的技术参数和应用场景。查看源码
| 分享笔记 (共有 篇笔记) |
