成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的楊浦網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
論壇升級后發(fā)現(xiàn)注冊用戶在輸入任何郵箱email時,一直提示email 地址無效.用firephp跟蹤發(fā)現(xiàn):隨機(jī)生成的email的后綴是@localhost!
找到原因,修改如下:
//原來代碼if(empty($email) && $_G['setting']['forgeemail']) {$_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST']; }//但是如果本地調(diào)試emai后綴就是@localhost,不符合郵箱的規(guī)則if(empty($email) && $_G['setting']['forgeemail']) {$_GET['email'] = $email = strtolower(random(16)).'@'.'klaus.com'; }//增加了16位隨機(jī)碼,減少生成相同的郵箱概率; //后綴固定,這樣就不提示'Email 地址無效'了!
但是這個感覺太lower了,回到dz3.1以前的玩法是:
在DZ3.2以前的版本的后臺我們可以在全局——注冊與訪問——取消郵箱注冊必填如下圖:
接下來就問題來了,Discuz官方團(tuán)隊可能也考慮到了這個問題,也許他們也像我這樣認(rèn)為這個地方在后臺出現(xiàn)沒多大必要,于是他們就在X3.2版本中更新了這個模塊,更新的結(jié)果我覺得應(yīng)該是這樣的:在后臺取消這個設(shè)置,但數(shù)據(jù)庫里面存儲的信息不變,而且在注冊的時候不再使用這個數(shù)據(jù)庫里面的設(shè)置的值為依據(jù)。于是就造成了上面的問題了,雖然讓用戶覺得不需要必須填(因為沒紅星),但不填之后注冊不了
通過對X3.1后臺設(shè)置分析發(fā)現(xiàn)這里是一個radio類型的,也就是開關(guān)(廢話而已,誰都看得出來);表單name為settingnew[forgeemail],值為0和1,0為關(guān)閉,1為打開,這個跟一般的習(xí)慣都是一樣的。也就是說這個值選擇1時我們注冊的時候可以不需要填寫郵箱,反之也就是默認(rèn)情況下我們必須填寫郵箱才能注冊帳號。
而做過Discuz二次開發(fā)的同學(xué)都應(yīng)該清楚,其實后臺類似這樣的設(shè)置數(shù)據(jù)都是存儲在common_setting這個數(shù)據(jù)表中,而很快我發(fā)現(xiàn)這個數(shù)據(jù)表中直接有forgeemail這個記錄,說明這個地方dz是直接保存的(不想保存高亮值信息那樣,還通過進(jìn)制轉(zhuǎn)化,哈哈,不用再看源代碼去了)。如下圖(當(dāng)然下面是默認(rèn)的樣子)
說到這里大家就應(yīng)該明白了什么問題了,其實這個問題就是3.2以后這個數(shù)據(jù)表中的skey為forgeemail的記錄只是用于判斷是否帶紅星,而不用于判斷是不是真要填;換句話說不管這里設(shè)置的是0還是1,你的網(wǎng)站注冊的時候都得填寫郵箱(這可能也是DZ團(tuán)隊在升級改變這個問題所忽視的地方,比如就算強(qiáng)制設(shè)計成必填,那么也應(yīng)該把數(shù)據(jù)庫的這個字段值在升級的時候自動覆蓋成0了)。
那么如果徹底解決(也就是可以讓你的網(wǎng)站實現(xiàn)用戶不不必填寫郵箱也可以注冊),這個相對比較復(fù)雜,要修改你注冊表單的驗證程序,而且我個人也不推薦這么做,這里就不詳述了。
那么接下來就是把注冊的時候帶上紅星(其實默認(rèn)的時候就是這樣的),當(dāng)然問題是針對在3.2之前通過后臺設(shè)置過這值的網(wǎng)站。那么現(xiàn)在去數(shù)據(jù)庫找到common_setting這個數(shù)據(jù)表找到skey值forgeemail的svalue改為默認(rèn)的0就可以了,也可以在數(shù)據(jù)庫管理工具或者網(wǎng)站后臺運(yùn)行以下sql語句
update pre_common_setting set 'svalue'='0' where 'skey'='orgeemail' 注意:這里的表前綴為DZ的默認(rèn)的pre_,如果你修改了,改成你新修改的
discuzX3.2后臺關(guān)閉注冊郵箱必填選項的功能。詳細(xì)過程如下:
步驟1:source/admincp/admincp_setting.php 文件
查找:
showsetting('setting_access_register_send_register_url', 'settingnew[sendregisterurl]', $setting['sendregisterurl'], 'radio');
大概是440-441行:
增加以下代碼:
showsetting('setting_access_register_forge_email', 'settingnew[forgeemail]', $setting['forgeemail'], 'radio');
步驟2:打開source/language/lang_admincp.php 文件
查找: 一個郵箱只允許注冊一個帳戶
大概811行,增加以下代碼:
'setting_access_register_forge_email' => '取消注冊郵箱必填', 'setting_access_register_forge_email_comment' => '開啟后如果用不不填寫注冊郵箱,將自動生成一個郵箱地址',
步驟3:修改source
/class/class_member.php
大概611行:
原文是:
$email = strtolower(trim($_GET['email']));if(empty($this->setting['ignorepassword'])) {if($_GET['password'] !== $_GET['password2']) { showmessage('profile_passwd_notmatch'); }if(!$_GET['password'] || $_GET['password'] != addslashes($_GET['password'])) { showmessage('profile_passwd_illegal'); } $password = $_GET['password']; } else { $password = md5(random(10)); } }
修改為(或直接替換以下:)
$email = strtolower(trim($_GET['email']));if(empty($email) && $_G['setting']['forgeemail']) { $_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST']; }if(empty($this->setting['ignorepassword'])) { if($_GET['password'] !== $_GET['password2']) { showmessage('profile_passwd_notmatch'); } if(!$_GET['password'] || $_GET['password'] != addslashes($_GET['password'])) { showmessage('profile_passwd_illegal'); } $password = $_GET['password']; } else { $password = md5(random(10)); } }
工具->更新緩存:
全局->注冊與訪問控制:
如果你想在注冊頁面不顯示 注冊郵箱選項,直接去掉模板中的相應(yīng)的email代碼即可。