ECmall邀请注册功能构想和实现

需求:客户想有一个可以邀请注册,,每一个客户都有自己的邀请链接,可以邀请朋友注册。

环境:WAMP,基于ECmallCMS二次开发。

初步构想:

每个用户在数据库中都有自己的id(A),可以通过判断id来确定A是否邀请了B。注册成功则写入数据库的ecm_member中。在member数据表添加一个字段,pr_id,作为邀请人的id。

首选分析ECmall的注册机制。

主入口文件:index.php?app=member&act=register&ret_url=

member模型下的register方法。

打开member.app.php,发现了 function register()方法。

首先是判断用户是否登录,if ($this->visitor->has_login) 如果没有登录就提醒登录 $this->show_warning(‘has_login’);

if (!IS_POST)这个判断代码让我很疑惑。

在网路上没找到详细的说明,新增加的这个变量是ThinkPHP3.0.1dev版本开始支持的。

从字面意思上看就是如果提交方式不为POST的话,做下面的操作。

我是这样修改的,在数据库中的member表添加一个user_pid字段,默认为0。然后打开现在使用的模板文件夹,打开member.register.html模板文件(ps:我的项目是配资公司旗下的一个项目)。

找到form表单的行,添加如下

<form name="" id="register_form" method="post" action=""><table><tr><td colspan="2"><h4>{$lang.enter_register_info}</h4></td><td >邀请id:(默认为空)<h4><input type="text" disabled="disabled" id="user_pid" name="user_pid" value="{$user_pid}" /></h4></td></tr>在app文件夹中打开member.app.php,找到register方法,在头部添加$get[‘user_pid’]接收数据并且assgin变量。

然后在$user_id=$ms->user->register($user_name,$password,$email,$user_pid);

然后打开passport下default.passport.php,找到register函数,增加参数$user_pid.

保存,打开浏览器访问 域名/index.php?app=member&act=register&ret_url=&user_pid=111测试,可以看到user_pid文本框已经显示出来了user_pid的值。

注册一个用户,然后就可以看到注册表中已经有了邀请的pid!

当然,user_pid需要做一下函数过滤,防止被人入侵。

sql语句:

select u.user_id,u.user_name, count(ui.user_id), group_concat(ui.user_name)from ecm_member u join ecm_member ui on u.user_id=ui.user_pidgroup by u.user_id

观今宜鉴古,无古不成今。

ECmall邀请注册功能构想和实现

相关文章:

你感兴趣的文章:

标签云: