首先来说明一下当我们要注册会员的时候填入邮箱后当鼠标离开文本框的时候他是利用ajax来调用判断用户的email是否以经被注册了,这要打开他的模版文件,home/templates/member/register.html在这个页面中我们可以看到:<input name="memberinfo[email]" type="text" style="ime-mode:disabled" require="true" datatype="email|ajax" url="{$M[url]}register.php?action=checkemail" msg="邮件格式不正确|" id="email" size="30" />这么一段代码,从这里我们可以看到他要调用的是register.php页面,其中传递了一个参数是action=checkemail那么我们去register.php页面,在这个页面中我们可以找到当action=checkemail时他所执行的代码:
case 'checkemail':
if(!is_email($value))
{
exit($LANG['input_valid_email']);
}
elseif(!$M['allowemailduplicate'] && $member->email_exists($value))
{
exit($member->msg());
}
else
{
exit('success');
}
break;
case 'regagreement':
exit($M['reglicense']);
break;
从这里可以看出他执行查询邮件是否以被注册了的代码是elseif(!$M['allowemailduplicate'] && $member->email_exists($value))
也就是调用的memaber.class.php这个类中的email_exists这个方法,所以我们只要对这个方法进行二次开发就可以了。
现在我们把这个方法改为:
function email_exists($email, $userid = '')
{
/** 二次开发目的:满足会员注册有些特定邮箱可以重复注册
* */
$debar_email_a=array();
$debar_email_a=explode('|',DEBAR_EMAIL);
$result = $this->db->get_one("SELECT userid,email FROM $this->table_cache WHERE email='$email' AND userid!='$userid'");
if($result && !in_array($result[email],$debar_email_a))
{
$this->msg = 'have_used_change_one_email';
return true;
}
return false;
/*
* 二次开发结束
* */
}
DEBAR_EMAIL 这个是我们定义的一个常量,我把他放在了config.inc.php这个文件中,他的里边存的值是这样子的:
//在会员注册中充许重复注册的邮箱
define('DEBAR_EMAIL','wfwl@126.com|wf0536@126.com');
这里边就是存储着你可以重复注册的邮箱。
说到这里我们应该明白后边的是怎么做的了。
备注:如果有更好的方法请贴出来共同分享
QQ:597342373