luigi |
Отправлено: 3 августа 2009 — 10:28
|
Newbie
Покинул форум
Сообщений всего: 10
Дата рег-ции: Март 2009
Репутация: 2
|
/!\ Последнюю версию мода (доработанную, на русском языке) Вы можете найти здесь!
Hi,
to check registration form in real time (with AJAX), make this change:
in the front of agreed.tpl add this code:
CODE:<script type="text/javascript" language="JavaScript">
<!--
function checkUsername(username,area) {
JsHttpRequest.query('jsloader.php?loader=verify', {action: area, value: username}, function(data,text) {
document.getElementById('checkusername').innerHTML=text;
}, false);
}
function checkPassword(password,area) {
JsHttpRequest.query('jsloader.php?loader=verify', {action: area, value: password}, function(data,text) {
document.getElementById('checkpassword').innerHTML=text;
}, false);
}
function checkMail(email,area) {
JsHttpRequest.query('jsloader.php?loader=verify', {action: area, value: email}, function(data,text) {
document.getElementById('checkmail').innerHTML=text;
}, false);
}
//-->
</script>
and change the input line of username, password and e-mail, so:
CODE:<td class="profilright"><input onblur="checkUsername(this.value,'username');" type="text" style="width: 200px" size="35" maxlength="20" name="inmembername"> <span id="checkusername"></span></td>
CODE:<td class="profilright"><input onblur="checkPassword(this.value,'password');" type="text" size="20" name="password" maxlength="16"> <span id="checkpassword"></span></td>
CODE:<td class="profilright"><input onblur="checkMail(this.value,'email');" type="text" name="emailaddress" style="width: 200px" size="20" maxlength="255"> <span id="checkmail"></span></td>
In the jsloader.php, found
CODE:if ($fm->input['loader'] === 'karma'){
and replace with
CODE:if ($fm->input['loader'] === 'verify'){
if ($fm->input['action'] === 'username') {
if ($fm->input['value'] == '') {
echo "<img src='./images/wrong.png' border='0'> <span class='warning'>".$fm->LANG['ErrUsernameEmpty']."</span>";
die();
}
$allusers = $fm->_Read('./data/users.php',FALSE);
$user_id = 0;
foreach ($allusers as $u_id=>$info) {
if ($fm->input['value'] == $info['n']) {
$user_id = $u_id;
break;
}
}
$_RESULT["error"] = 0;
if ($user_id != 0) echo "<img src='./images/wrong.png' border='0'> <span class='warning'>".$fm->LANG['ErrUsernameUsed']."</span>";
else echo "<img src='./images/ok.png' border='0'> <span class='ok'>".$fm->LANG['ErrUsernameOk']."</span>";
} elseif ($fm->input['action'] === 'email') {
if ($fm->_Chek_Mail('value') === FALSE) echo "<img src='./images/wrong.png' border='0'> <span class='warning'>".$fm->LANG['ErrEmailWrong']."</span>";
else echo "<img src='./images/ok.png' border='0'> <span class='ok'>".$fm->LANG['ErrEmailOk']."</span>";
} elseif ($fm->input['action'] === 'password') {
if (strlen($fm->input['value']) < 6 ) echo "<img src='./images/wrong.png' border='0'> <span class='warning'>".$fm->LANG['ErrPasswordWrong']."</span>";
else echo "<img src='./images/ok.png' border='0'> <span class='ok'>".$fm->LANG['ErrPasswordOk']."</span>";
}
} elseif ($fm->input['loader'] === 'karma'){
add this to style.css
CODE:.warning {color: red;}
.ok {color: green;}
add this line to lang_front_all.php
CODE:$this->LANG['ErrUsernameOk'] = 'Username available';
$this->LANG['ErrUsernameUsed'] = 'Username already used by other user';
$this->LANG['ErrUsernameEmpty'] = 'Username MUST be filled!';
$this->LANG['ErrEmailOk'] = 'E-mail OK';
$this->LANG['ErrEmailWrong'] = 'E-mail not valid !';
$this->LANG['ErrPasswordOk'] = 'valid password';
$this->LANG['ErrPasswordWrong'] = 'password not valid';
Here a demo:
http://www.bitlibero.com/flatbb/...x.php?s=register
This is a screenshot:(Отредактировано автором: 3 августа 2009 — 10:31) |
|
|
yura3d |
Отправлено: 3 августа 2009 — 12:38
|
ExBB Team ExBB Developer ExBB Mods Author
Покинул форум
Сообщений всего: 3394
Дата рег-ции: Февр. 2009
Откуда: Минск, Беларусь
Репутация: 353
|
Hello! Thank's for your mod, it's a good idea to check up the register data by Ajax, but I've found some moments
First, all input data (from the $fm->input array) is need to be initialized before using in the scripts (initialization methods _Intval(), _String(), etc from include/vars.class.php may be call from $fm object). Second, the nicknames should be checked in lower case (check the example with nickname adMIN on your forum). So, it's neccessary to add this string (file jsloader.php):
CODE:$fm->input['value'] = $fm->_LowerCase($fm->input['value']);
before this:
CODE:$allusers = $fm->_Read('./data/users.php',FALSE);
And third, it would be good thing if the check backend code will be splitted to the functions and will be included to the jsloader.php from another file (to improve code utilization and protect garbaging backend loader jsloader.php)
luigi пишет:FBB_SKINDIR.DEF_SKIN
We are not using these constants in ExBB FM, so, I've deleted this fragment |
|
|
yura3d |
Отправлено: 4 августа 2009 — 11:54
|
ExBB Team ExBB Developer ExBB Mods Author
Покинул форум
Сообщений всего: 3394
Дата рег-ции: Февр. 2009
Откуда: Минск, Беларусь
Репутация: 353
|
Вобщем, как и обещал, вот окончательная версия этого мода для ExBB FM 1.0 RC1. Бакэнд и фронтэнд проверки вынесены в отдельные файлы в виде функций, что позволяет в будущем более гибко расширять, дополнять и изменять функциональность мода (например, с лёгкостью можно расширить действие этого мода и на другие формы, например, форму создания темы), а также избегать излишних правок в скриптах и шаблонах при установке дополнительных скинов или необходимости изменения формата вывода сообщений об ошибках. В предложенном далее варианте мода также реализована проверка ввода защитного кода с картинки-каптчи. Данный мод полностью совместим с обновлением каптчи без перезагрузки страницы
Для установки небходимо проделать следующие изменения. Откройте файл jsloader.php, найдите строки:
CODE:} elseif ($fm->input['loader'] === 'threadstop'){
include('modules/threadstop/threadstop.php');
И под ними разместите строки:
CODE:} else if ($fm->input['loader'] == 'verify') {
include('include/JsHttpRequest/verify_forms.php');
Далее откройте файл templates/ваш_скин/agreed.tpl, найдите строку:
CODE:<td class="profilright"><input type="text" style="width: 200px" size="35" maxlength="20" name="inmembername"></td>
И замените её строками:
CODE:<td class="profilright"><input type="text" style="width: 200px" size="35" maxlength="20" name="inmembername" onblur="verify_register(this);" />
<span id="verify_inmembername"></span></td>
Затем в этом же файле найдите строку:
CODE:<td class="profilright"><input type="text" size="20" name="password" maxlength="16"></td>
И замените её строками:
CODE:<td class="profilright"><input type="text" size="20" name="password" maxlength="16" onblur="verify_register(this);">
<span id="verify_password"></span></td>
Далее найдите строку:
CODE:<td class="profilright"><input type="text" name="emailaddress" style="width: 200px" size="20" maxlength="255"></td>
Замените её строками:
CODE:<td class="profilright"><input type="text" name="emailaddress" style="width: 200px" size="20" maxlength="255" onblur="verify_register(this);" />
<span id="verify_emailaddress"></span></td>
Найдите фрагмент:
CODE:<td class="profilright"><input type="text" style="width: 130px" name="captcha" size="13" maxlength="10">
Замените его фрагментом:
CODE:<td class="profilright"><input type="text" style="width: 130px" name="captcha" size="13" maxlength="10" onblur="verify_register(this);" />
<span id="verify_captcha"></span>
И, наконец, найдите строку:
И разместите под ней строку:
CODE:<script language="JavaScript" src="javascript/verify_forms.js"></script>
Откройте файл templates/ваш_скин/style.css и в самое его начало добавьте строки:
CODE:.verify_ok {
padding: 0 0 0 16px;
color: #00cc00;
background: url('im/ok.gif') no-repeat;
}
.verify_wrong {
padding: 0 0 0 16px;
color: #ff0000;
background: url('im/wrong.gif') no-repeat;
}
Если Вам покажется, что для отображения подсказок в правой части страницы не хватает места, Вы можете увеличить его в строке (этот же файл):
CODE:.profilright { background-color: #F5F9FD; padding:6px; margin-top:1px;width:40%; border-top:1px solid #C2CFDF; }
Здесь 40% - это ширина столбца, содержащего непосредственно формы для ввода данных, справа от форм в этом столбце и будут выводиться предупреждения (см. скриншот ниже). При разрешении экрана 1024x768 оптимальной будет ширина 50%
Теперь откройте файл language/russian/lang_front_register.php, найдите строку:
CODE:$this->LANG['YouZone'] = 'Введите необходимую разницу в часах относительно времени на форуме, и все время будет отображаться с учетом разницы в вашей временной зоне.';
И разместите под ней строки:
CODE:$this->LANG['VerifyNameEmpty'] = 'Не введено имя';
$this->LANG['VerifyRuNicks'] = 'Русские ники запрещены';
$this->LANG['VerifyRuOrEn'] = 'Имя должно быть на одном языке';
$this->LANG['VerifyNameProtect'] = 'Имя содержит недопустимые слова';
$this->LANG['VerifyProfanity'] = 'Не используйте ругательства';
$this->LANG['VerifyNameExists'] = 'Такое имя уже есть на форуме';
$this->LANG['VerifyEmailEmpty'] = 'Не указан адрес e-mail';
$this->LANG['VerifyEmailCorrect'] = 'Указан некорректный e-mail';
$this->LANG['VerifyEmailExists'] = 'Такой e-mail уже есть на форуме';
$this->LANG['VerifyPasswordEmpty'] = 'Не указан пароль';
$this->LANG['VerifyPasswordShort'] = 'Короткий пароль';
$this->LANG['VerifyCaptchaEmpty'] = 'Не введён защитный код';
$this->LANG['VerifyCaptchaWrong'] = 'Введён неверный защитный код';
На этом с ручными изменениями всё, теперь распакуйте содержимое прикреплённого архива в корневую папку форума. Архив содержит иконки ok.gif и wrong.gif в папке templates/InvisionExBB/im, если Вы используете другие скины, Вам необходимо скопировать эти иконки в папки Ваших скинов templates/ваш_скин/im |
|
|
|