2009年4月8日星期三

在discuz7.0正式版的注册页面上加入QQ必选字段

经客户要求,要在discuz7.0正式版的注册页面上加上QQ必选字段,到discuz的论坛里找了半天也没找到一个合适的,然后就自己研究起来,discuz的代码真够错综复杂的,不过,还是出了结果,具体修改方法如下:

涉及到的四个文件:templates/你的模板文件夹/register.htm;templates/你的模板文件夹/messages.lang.php;ajax.php;register.php

register.htm

找到如下代码:


<label><em>{lang email}:</em><input type="text" name="email" autocomplete="off" size="25" id="email" onBlur="checkemail()" tabindex="1" class="txt" /> *</label>

在它下面添加:


<!-- 增加QQ注册 -->
<label><em>QQ:</em><input type="text" id="qq" name="qq" onBlur="checkqq()" autocomplete="off" size="25" maxlength="15" value="" tabindex="1" class="txt" /> *</label>

并在文件低部加一个js的QQ验证函数:


//验证QQ
function checkqq() {
var qq = trim($('qq').value);
if(qq == '' || qq == lasteqq) {
return;
} else {
lastqq = qq;
}
ajaxget('ajax.php?infloat=register&handlekey=register&action=checkqq&qq=' + qq, 'returnmessage4');
}

register.php

找到如下代码:


$db->query("REPLACE INTO {$tablepre}memberfields (uid, authstr $fieldadd1) VALUES ('$uid', '$authstr' $fieldadd2)");

改成:


$db->query("REPLACE INTO {$tablepre}memberfields (uid, qq, authstr $fieldadd1) VALUES ('$uid', '$qq', '$authstr' $fieldadd2)");

ajax.php

找到:


elseif($action == 'checkemail') {

$email = trim($email);

require_once DISCUZ_ROOT.'./uc_client/client.php';

$ucresult = uc_user_checkemail($email);
if($ucresult == -4) {
showmessage('profile_email_illegal', '', 1);
} elseif($ucresult == -5) {
showmessage('profile_email_domain_illegal', '', 1);
} elseif($ucresult == -6) {
showmessage('profile_email_duplicate', '', 1);
}
}

在它下面添加一个QQ验证方法:


///验证QQ
elseif($action == 'checkqq') {
$qq = trim($qq);
$len = strlen($qq);
if(!preg_match( "/^[0-9]+$/",$qq) or $len<5 ){
showmessage('profile_qq_duplicate', '', 1);
}
}

messages.lang.php

添加一行:


'profile_qq_duplicate' => 'QQ号必须为数字,且不小于 5 位数',

0 评论: