在網上找了一大堆的方法,都是有各種問題,在結合網上的方法 別人給的方法,摸索出了一套自己的方法,不一定登陸的時候非要用戶名跟郵箱都一個字段來判斷,我加一個類型的字段不就行了。這樣在接收擦數的時候根據類型判斷接收到的是用戶名還是郵箱 再各自判斷,下面上代碼了
1、先打開/phpcms/templates/default/member/login.html
在用戶名的input前面加上如下類型 判斷傳送出去的是用戶名還是email
<select name="logintypes" id="logintypes" >
<option value="0">QQ郵箱</option>
<option value="1">用戶名</option>
</select>
<INPUT name="username" class="input-text" id="username" size="18" maxlength="50" placeholder="請輸入帳號信息" >
顯示效果如下:

2、打開/phpcms/modules/member/index.php 打開610行
$username = isset($_POST['username']) && is_username($_POST['username']) ? trim($_POST['username']) : showmessage(L('username_empty'), HTTP_REFERER);
替換為
if ($_POST['logintypes']==0){
$username = isset($_POST['username']) && is_email($_POST['username']) ? trim($_POST['username']) : showmessage(L('username_empty'), HTTP_REFERER);
}
if ($_POST['logintypes']==1){
$username = isset($_POST['username']) && is_username($_POST['username']) ? trim($_POST['username']) : showmessage(L('username_empty'), HTTP_REFERER);
}

搜索
$status = $this->client->ps_member_login($username, $password);
替換為
if ($_POST['logintypes']==0){
$status = $this->client->ps_member_login($username, $password,1);
}
if ($_POST['logintypes']==1){
$status = $this->client->ps_member_login($username, $password);
}

3、打開/statics/js/formvalidatorregex.js
搜索
ps_username:"^[\\u4E00-\\u9FA5\\uF900-\\uFA2D_\\w]+$" //中文、字母、數字
替換為
ps_username:"^[\\u4E00-\\u9FA5\\uF900-\\uFA2D_\\w@\.]+$"
表示input字段也可以輸入email地址

全部操作完了就修改完畢 登陸測試下吧
文章來自:http://www.daimabiji.com/cmslearn/176.html