AJAX проверка для формы регистрации
Небольшая модификация стандартной формы регистрации, которая позволит на лету проверять свободен ли логин или занять. Ее можно, в принципе, использовать для проверки чего угодно, например email и т.д.
Итак что нам делает стандартная форма регистрации. При совпадении логина или email пользователя перезагружается вся страница, мало того все введенные данные не сохраняются, и приходиться вводить их еще раз. Это как то не очень удобно.
В стандартной форме регистрации, подключается mootools, я приведу пример на нем. Открываем стандартный шаблон регистрации (Joomla ROOT\components\com_user\views\register\tmpl\default.php), поставим сразу кодировку UTF-8 без BOM, в верху видим javascript, добавим к нему нашу функцию, он будет выглядеть так.
<script type="text/javascript">
<!--
Window.onDomReady(function(){
document.formvalidator.setHandler('passverify', function (value) { return ($('password').value == value); } );
var log = new Element('span').injectAfter($('username'));
$('username').addEvent('keyup', function(e) {
if ($('username').value.length > 1) { //Здесь устанавливаем с какого символа начинать проверку.
log.setHTML('Проверяю...');
var username = $('username').value;
var url = 'index.php?option=com_user&task=chekusername&format=row&username='+encodeURIComponent(username);
new Ajax(url, {
method: 'post',
onComplete: function(response) {
var res = Json.evaluate(response);
if (res) {
log.setHTML('Логин занят');
$('username').addClass('invalid');
} else {
log.setHTML('Логин свободен');
$('username').removeClass('invalid');
}
}
}).request();
} else {
log.empty();
}
});
});
// -->
</script>
Дальше нужно добавить функцию в контроллер (Joomla ROOT\components\com_user\controller.php), можно в конец, пред последней "}".
function chekusername()
{
$username = JRequest::getVar('username');
$db =& JFactory::getDBO();
$query = 'SELECT id' .
' FROM #__users' .
' WHERE LOWER( username ) = '.$db->quote($db->getEscaped($username), true);
$db->setQuery( $query );
$result = $db->loadResult();
$result ? $result = true : $result = false;
echo json_encode($result);
}
Теперь имя пользователя будет проверяться после каждого введенного символа в поле username. Аналогично можно сделать для email.
25
Комментарии
11.03.2010 11:24
19.03.2010 17:25
если только логин на русском - не замечает аналогов, пишет, что логин свободен;))
пытался сделать то же для поля email результат аналогичный. В чём тонкость?
18.04.2010 18:04
24.05.2010 10:55
Не работает в ИЕ6-7.
Пожалуйста, если не сложно... посоветуйте как бы его доделать в этом направлении?
25.05.2010 21:21
Для этого в контроллере нужно было заменить
$username = JRequest::getCMD('username');
на
$username = JRequest::getVar('username');
И добавить в скрипт encodeURIComponent, для пляcки с IE.
По поводу того что не работает в ИЕ6-7, то я проверял, все работает.
28.05.2010 18:10
Ваш блог - супер!))
28.05.2010 18:14
Я всего два дня как изучаю джумлу.
Сделал как написано, все получилось!
А где нужно изменить, чтобы проверялся e-mail?
Спасибо, с уважением Дмитрий!
04.06.2010 10:21
в IE6 вообще ничего не происходит
как быть?
03.08.2010 14:20
23.08.2010 20:28
Window.onDomReady(function(){
Похоже конфликт какой-то...
26.08.2010 21:58
В шаблоне не отключали его или плагином?
08.09.2010 16:29
11.10.2010 22:08
И не работает почему-то в IE-8
14.02.2011 12:16
17.02.2011 21:59
Единственное что хотелось бы добавить, лично мне - проверку на введение кирилицы, чтобы в случае введения логина на русском пользователь получал предупреждения - "Только латиница!'
Также хочу спросить - как окрасить эти сообщения(зеленый,красный),понимаю что гдето в сss нужно искать((( но где не знаю...подскажете?...
И последнее, автор пишет что можно так же сделать для проверки email ... Поскольку с AJAX разобраться легко не получится(((, может выделите те строки которые нужно менять...типа чайникам...?
Еще раз спасибо.
11.09.2011 14:52
Что мне делать чтобы связать всё воедино, может какая-то прога есть, заранее спасибо!
24.10.2011 01:33
07.02.2012 18:43
RSS лента комментариев этой записи