现在很多主流的电商网站都直接用email作为会员账号,好处是省得用户既要想一个用户名,又要填邮箱,邮箱对于电商网站的重要性不用多提,因此用email作为会员的唯一标识是很合理的做法,本文给出针对ECSHOP实现该功能的方法,原理是注册时将email表单的值顺便返回给username,并去掉注册时username的js验证,然后在登录中实现username跟email都可以登录,这样做的好处是,即实现了ecshop用email注册登录的功能,又不改动ecshop的数据库和后台功能,其实本质上没有变化什么,会员账号还是存在的,邮箱也是存在的,只是我们强制把会员账号等于email账号。
首先修改注册部分
-------------------------------------------------------------------------------------------------------------------------
1,themes/****/user_passport.dwt 会员名称输入的表单,将之去掉
2,js/user.js 找到 function register() 并将以下代码删除
if (username.length == 0)
{
msg += username_empty + ‘\n‘;
}
else if (username.match(/^\s*$|^c:\\con\\con$|[%,\‘\*\"\s\t\<\>\&\\]/))
{
msg += username_invalid + ‘\n‘;
}
else if (username.length < 3)
{
//msg += username_shorter + ‘\n‘;
}
3,user.php 找到 elseif ($action == ‘act_register‘) 将以下代码
$username = isset($_POST[‘username‘]) ? trim($_POST[‘username‘]) : ‘‘;
改为
$username = isset($_POST[‘email‘]) ? trim($_POST[‘email‘]) : ‘‘;
其次实现登录时可以使用email登录
-------------------------------------------------------------------------------------------------------------------------
1,includes/modules/integrates/integrate.php 找到 function login 并将整个函数改为以下代码
function login($username, $password, $remember = null)
{
if(is_email($username))
{
$sql = "select ".$this->field_name." from
".$this->table($this->user_table)." where
".$this->field_email."=‘".$username."‘";
$username = $this->db->getOne($sql);
if(!$username) return false;
}
if ($this->check_user($username, $password) > 0)
{
if ($this->need_sync)
{
$this->sync($username,$password);
}
$this->set_session($username);
$this->set_cookie($username, $remember);
return true;
}
else
{
return false;
}
}