此插件需要服务器支持 mb_convert_encoding 或 iconv 函数(一般同时不支持 2 种函数的服务器很少). 要知道自己的服务器是否支持该插件,安装前可以先将下列代码保存为 test.php 进行测试 PHP 代碼:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>AJAX Register Check</title>
</head>
<body>
<?
if (function_exists('mb_convert_encoding')) {
echo "<span style='font-size:12px'>mb_convert_encoding 函数 - <strong style='color: #FF0000'>支持</strong><span><br>\n";
} else {
echo "<span style='font-size:12px'>mb_convert_encoding 函数 - 不支持<span><br>\n";
}
if (function_exists('iconv')) {
echo "<span style='font-size:12px'>iconv 函数 - <strong style='color: #FF0000'>支持</strong><span><br>\n";
} else {
echo "<span style='font-size:12px'>iconv 函数 - 不支持<span><br>\n";
}
?>
</body>
</html>
更新历史
1.0.0:
初始版本
1.0.1:
修正: 无法检测中文名的 Bug
添加: AJAX 登录用户名检查
编辑 register 模板
查找:
在下面添加:
HTML 代碼:
<script type="text/javascript" src="clientscript/vbulletin_ajax_register.js"></script>
查找:
HTML 代碼:
<input type="text" class="bginput" name="username" size="50" maxlength="$vboptions[maxuserlength]" value="$username" />
修改为:
HTML 代碼:
<input type="text" class="bginput" name="username" size="50" maxlength="$vboptions[maxuserlength]" value="$username" onblur="checkName(this.value,'')" />
查找:
HTML 代碼:
<fieldset class="fieldset">
<legend>$vbphrase[password]</legend>
<table cellpadding="0" cellspacing="$stylevar[formspacer]" border="0" width="400">
在上面添加:
HTML 代碼:
<span class="registererrorhidden" id="nameCheckFailed">$vbphrase[registererror]</span>
<span class="registerokhidden" id="nameCheckOk">$vbphrase[registerok]</span>
<span class="registererrorhidden" id="nameCheckNull">$vbphrase[registernull]</span>
查找:
HTML 代碼:
<input type="text" class="bginput" name="email" size="25" maxlength="50" value="$email" dir="ltr" />
修改为:
HTML 代碼:
<input type="text" class="bginput" name="email" size="25" maxlength="50" value="$email" dir="ltr" onblur="checkMail(this.value,'')" />
查找:
HTML 代碼:
<if condition="$show['regimagecheck']">
在上面添加:
HTML 代碼:
<span class="registererrorhidden" id="mailCheckFailed">$vbphrase[mailregistererror]</span>
<span class="registerokhidden" id="mailCheckOk">$vbphrase[mailregisterok]</span>
<span class="registererrorhidden" id="mailCheckNull">$vbphrase[mailregisternull]</span>
查找:
HTML 代碼:
<input type="submit" class="button" value="$vbphrase[complete_registration]" accesskey="s" />
修改为:
HTML 代碼:
<input type="submit" class="button" value="$vbphrase[complete_registration]" accesskey="s" name="submitRegistration" />
编辑 register.php 文件
查找:
PHP 代碼:
($hook = vBulletinHook::fetch_hook('register_start')) ? eval($hook) : false;
在下面添加:
PHP 代碼:
$vbulletin->input->clean_array_gpc('r', array(
'username' => TYPE_STR,
'email' => TYPE_STR
));
// ############################### Start AJAX UserName check ###############################
if ($_REQUEST['do'] == 'checkusername')
{
// set XML type and nocache headers
header('Content-Type: text/xml');
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
$username = htmlspecialchars_uni($vbulletin->GPC['username']);
// 如果 mb_convert_encoding 函数可用则使用该函数进行转换
if (function_exists('mb_convert_encoding'))
{
// 根据用户操作系统语言判断是否需要转换编码
if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "zh-cn")
{
$username = mb_convert_encoding($username, "UTF-8", "GBK"); // 简体中文转换为 UTF-8
}
else if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "zh-tw")
{
$username = mb_convert_encoding($username, "UTF-8", "BIG5"); // 繁体中文转换为 UTF-8
}
}
// mb_convert_encoding 函数不可用则使用 iconv 函数进行转换
else if (function_exists('iconv'))
{
// 根据用户操作系统语言判断是否需要转换编码
if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "zh-cn")
{
$username = iconv("GBK", "UTF-8", $username); // 简体中文转换为 UTF-8
}
else if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "zh-tw")
{
$username = iconv("BIG5", "UTF-8", $username); // 简体中文转换为 UTF-8
}
}
if (empty($vbulletin->GPC['username']))
{
$usernametaken = '2';
}
else if (!empty($username) AND $checkuser = $db->query_first("
SELECT username
FROM " . TABLE_PREFIX . "user
WHERE username IN ('" . $db->escape_string($username) . "')
"))
{
$usernametaken = '1';
}
else {
$usernametaken = '0';
}
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<response>\n<method>checkName</method>\n<result>\n";
echo $usernametaken;
echo "\n</result>\n</response>";
}
// ############################### Start AJAX Email check ###############################
if ($_REQUEST['do'] == 'checkmail')
{
// set XML type and nocache headers
header('Content-Type: text/xml');
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
$email = htmlspecialchars_uni($vbulletin->GPC['email']);
if (empty($vbulletin->GPC['email']))
{
$emailtaken = '2';
}
else if (is_banned_email($_REQUEST['email']))
{
$emailtaken = '1';
}
else if (!empty($email) AND $checkmail = $db->query_first("
SELECT email
FROM " . TABLE_PREFIX . "user
WHERE email IN ('" . $db->escape_string($email) . "')
"))
{
$emailtaken = '1';
}
else {
$emailtaken = '0';
}
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<response>\n<method>checkMail</method>\n<result>\n";
echo $emailtaken;
echo "\n</result>\n</response>";
}
编辑 global.php 文件
查找:
PHP 代碼:
$_doArray = array('contactus', 'docontactus', 'register', 'signup', 'requestemail', 'emailcode', 'activate', 'login', 'logout', 'lostpw', 'emailpassword', 'addmember', 'coppaform', 'resetpassword', 'regcheck', 'checkdate');
修改为:
PHP 代碼:
$_doArray = array('contactus', 'docontactus', 'register', 'signup', 'requestemail', 'emailcode', 'activate', 'login', 'logout', 'lostpw', 'emailpassword', 'addmember', 'coppaform', 'resetpassword', 'regcheck', 'checkdate', 'checkusername', 'checkmail');
添加短语
组: Gobal
代碼:
<phrase name="registererror"><![CDATA[注意: 该用户名已经被注册使用,请更换其他的用户名.]]></phrase>
<phrase name="registernull"><![CDATA[错误: 请输入您想要的用户名!]]></phrase>
<phrase name="registerok"><![CDATA[该用户名未被使用,请继续填写注册表单以完成注册.]]></phrase>
<phrase name="mailregistererror"><![CDATA[注意: 该 E-mail 地址已被其他用户使用或已经被管理员禁用.]]></phrase>
<phrase name="mailregisternull"><![CDATA[错误: 请输入您的一个有效的电子邮箱地址!]]></phrase>
<phrase name="mailregisterok"><![CDATA[该 E-mail 地址未被使用,请继续填写注册表单以完成注册.]]></phrase>
添加 CSS:
代碼:
/* ***** AJAX Username and Email Check ***** */
span.registererrorhidden, span.registerokhidden {
display: none;
}
span.registererror {
display: block;
background: #FFCCCC;
border: 1px solid #CC0000;
color: #000000;
margin: 3px 0 3px 0;
padding: 3px;
}
span.registerok {
display: block;
background: #F0F5FA;
border: 1px solid #C2CFDF;
color: #000000;
margin: 3px 0 3px 0;
padding: 3px;
}
上传 vbulletin_ajax_register.js 到 clientscript 目录.
Done! Addon: AJAX 登录用户名检查 注意: 安装 AJAX 登录用户名检查前需要先将 AJAX Register Check 安装完毕.
编辑 login.php 文件
查找:
PHP 代碼:
// ############################### start logout ###############################
在上面添加:
PHP 代碼:
// ############################### Start AJAX UserName check ###############################
if ($_REQUEST['do'] == 'checkusername')
{
$vbulletin->input->clean_array_gpc('r', array(
'vb_login_username' => TYPE_STR
));
// set XML type and nocache headers
header('Content-Type: text/xml');
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
$username = $vbulletin->GPC['vb_login_username'];
// 如果 mb_convert_encoding 函数可用则使用该函数进行转换
if (function_exists('mb_convert_encoding'))
{
// 根据用户操作系统语言判断是否需要转换编码
if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "zh-cn")
{
$username = mb_convert_encoding($username, "UTF-8", "GBK"); // 简体中文转换为 UTF-8
}
else if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "zh-tw")
{
$username = mb_convert_encoding($username, "UTF-8", "BIG5"); // 繁体中文转换为 UTF-8
}
}
// mb_convert_encoding 函数不可用则使用 iconv 函数进行转换
else if (function_exists('iconv'))
{
// 根据用户操作系统语言判断是否需要转换编码
if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "zh-cn")
{
$username = iconv("GBK", "UTF-8", $username); // 简体中文转换为 UTF-8
}
else if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "zh-tw")
{
$username = iconv("BIG5", "UTF-8", $username); // 简体中文转换为 UTF-8
}
}
if (empty($vbulletin->GPC['vb_login_username']))
{
$usernametaken = '2';
}
else if (!empty($username) AND $checkuser = $db->query_first("
SELECT username
FROM " . TABLE_PREFIX . "user
WHERE username IN ('" . $db->escape_string($username) . "')
"))
{
$usernametaken = '1';
}
else {
$usernametaken = '0';
}
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<response>\n<method>checkName</method>\n<result>";
echo $usernametaken;
echo "\n</result>\n</response>";
}
编辑 STANDARD_ERROR 模板
查找:
在下面添加:
HTML 代碼:
<script type="text/javascript" src="clientscript/vbulletin_ajax_login.js"></script>
查找:
HTML 代碼:
<form action="login.php" method="post" onsubmit="md5hash(vb_login_password, vb_login_md5password, vb_login_md5password_utf, $show[nopasswordempty])">
修改为:
HTML 代碼:
<form action="login.php" method="post" onsubmit="md5hash(vb_login_password, vb_login_md5password, vb_login_md5password_utf, $show[nopasswordempty])" name="login">
查找:
HTML 代碼:
<input type="text" class="bginput" name="vb_login_username" size="50" accesskey="u" tabindex="1" />
修改为:
HTML 代碼:
<input type="text" class="bginput" name="vb_login_username" size="50" accesskey="u" tabindex="1" onblur="checkName(this.value,'')" />
查找:
HTML 代碼:
<span style="float:$stylevar[right]"><a href="login.php?$session[sessionurl]do=lostpw">$vbphrase[forgotten_your_password]</a></span>
在上面加入:
HTML 代碼:
<span class="registererrorhidden" id="nameCheckFailed">$vbphrase[loginerror]</span>
<span class="registerokhidden" id="nameCheckOk">$vbphrase[loginok]</span>
<span class="registererrorhidden" id="nameCheckNull">$vbphrase[loginnull]</span>
查找:
HTML 代碼:
<input type="submit" class="button" value="$vbphrase[log_in]" accesskey="s" tabindex="1" />
修改为:
HTML 代碼:
<input type="submit" class="button" value="$vbphrase[log_in]" accesskey="s" tabindex="1" name="submitLogin" />
添加短语
组: Gobal
代碼:
<phrase name="loginerror"><![CDATA[错误: 该用户名不存在,请确认输入是否正确.]]></phrase>
<phrase name="loginnull"><![CDATA[错误: 请输入用户名完成登录!]]></phrase>
<phrase name="loginok"><![CDATA[用户名正确,请输入密码完成登录.]]></phrase>
上传 vbulletin_ajax_login.js 到 clientscript 目录.
演示:
http://52popx.com/bbs/register.php
由于本人比较懒,所以没做成产品发布,呵呵.如果那位喜欢的话劳烦一下希望能做成产品发布,方便大家.
插件有部分代码参照了 vBulletin.Org 上的一个同类插件,那插件问题不少,所以重新写(应该说改)了个~呵呵. ^___^