台灣深藍vBulletin技術論壇  

返回   台灣深藍vBulletin技術論壇 > 深藍官方整理發表區 > vBulletin 外掛深藍統整資源區 > 使用者介面增強外掛 (EndUser Options)

回覆
 
主題工具
舊 2006-02-11, 03:20 PM   #1
Junior Member
 
註冊日期: 2006-02-11
住址: http://www.joyep.net
文章: 3
預設 【外掛】AJAX Register Check 1.0.1

此插件需要服务器支持 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 代碼:
$headinclude
在下面添加:
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 代碼:
$headinclude
在下面添加:
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 上的一个同类插件,那插件问题不少,所以重新写(应该说改)了个~呵呵. ^___^
上傳的圖像
檔案類型: jpg S1.JPG (63.8 KB, 82 次查看)
檔案類型: jpg S2.JPG (37.9 KB, 62 次查看)
上傳的附件
檔案類型: rar AJAX_Register_Check_1-0-1.rar (4.8 KB, 20 次查看)
explon 目前離線   回覆時引用此篇文章
舊 2007-01-05, 11:00 PM   #2
Member
 
註冊日期: 2006-11-30
住址: http://bbs.tw-v.com/
文章: 41
預設

3.64版的register模版找不到!!

<if condition="$show['regimagecheck']">


還是這個1.01版不適用於3.64,有人能夠提供3.64能用的修改方式嗎或是新的版本,謝謝^^
k801061 目前離線   回覆時引用此篇文章
回覆

書籤

主題工具

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為北京時間。現在的時間是 07:33 AM


Powered by vBulletin® 版本 3.7.3
版權所有 ©2000 - 2008,Jelsoft Enterprises Ltd.
Ad Management by RedTyger