AJAX проверка для формы регистрации

13/01/2010 Документация Joomla 1.5

Небольшая модификация стандартной формы регистрации, которая позволит на лету проверять свободен ли логин или занять. Ее можно, в принципе, использовать для проверки чего угодно, например 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 

Комментарии   

 
0 Валерий
11.03.2010 11:24
Спасибо Все получилось. А помогите с почтовым ящиком и проверкой пароля такое проделать.
 
 
-2 Андрей Карпов
19.03.2010 17:25
C логином на английском прошло на ура;)
если только логин на русском - не замечает аналогов, пишет, что логин свободен;))
пытался сделать то же для поля email результат аналогичный. В чём тонкость?
 
 
-3 nick0000
18.04.2010 18:04
Нифига не работает,все правильно сделал,пробовал в контроллер в другое место вставлять,ошибки выдает.
 
 
-3 jem777
24.05.2010 10:55
Не работает с кириллическими именами.
Не работает в ИЕ6-7.
Пожалуйста, если не сложно... посоветуйте как бы его доделать в этом направлении?
 
 
+1 SmokerMan
25.05.2010 21:21
для кириллических символов поправил.
Для этого в контроллере нужно было заменить
$username = JRequest::getCMD('username');
на
$username = JRequest::getVar('username');

И добавить в скрипт encodeURIComponent, для пляcки с IE.

По поводу того что не работает в ИЕ6-7, то я проверял, все работает.
 
 
-2 jem777
28.05.2010 18:10
Спасибо большое! Обязательно протестирую и поставлю у себя на сайте если все будет нормально.
Ваш блог - супер!))
 
 
-2 Дмитрий
28.05.2010 18:14
Здравствуйте!
Я всего два дня как изучаю джумлу.
Сделал как написано, все получилось!
А где нужно изменить, чтобы проверялся e-mail?
Спасибо, с уважением Дмитрий!
 
 
-2 Кирилл
04.06.2010 10:21
в мозиле появилась надпись проверяю... и все...ни каких больше действий
в IE6 вообще ничего не происходит

как быть?
 
 
-2 Владимир
03.08.2010 14:20
Такая же беда.. проеряет... отключил кэш.. дкмал из-за него, а нет..
 
 
-1 Дмитрий
23.08.2010 20:28
А у меня не работает функция... Firebug пишет: Window.onDomReady is not a function

Window.onDomReady(function(){

Похоже конфликт какой-то...
 
 
-2 SmokerMan
26.08.2010 21:58
скорее всего у вас не подключается mootools.
В шаблоне не отключали его или плагином?
 
 
-2 Дмитрий
08.09.2010 16:29
"Программист" мне что-то делал, и у него были проблема с аяксом. Возможно, конфликт. Сам я не программист, точнее сказать не могу... Но в шаблоне mootools, вроде подключен, а его скрипты я отключил...
 
 
-2 jerkyboy
11.10.2010 22:08
Подскажите, пожалуйста, а как тоже самое сделать для проверки емэйла и длины пароля.

И не работает почему-то в IE-8
 
 
-1 Виктор
14.02.2011 12:16
действительно прекрасная штука. Но вот есть небольшая сложность, а если установлена CB 1.3.1 (Можно ли в CB реализовать проверку полей, которые посетитель заполняет при регистрации)
 
 
-1 Мила
17.02.2011 21:59
Давно искала... Спасибо автору огромное,просто молодец!
Единственное что хотелось бы добавить, лично мне - проверку на введение кирилицы, чтобы в случае введения логина на русском пользователь получал предупреждения - "Только латиница!'

Также хочу спросить - как окрасить эти сообщения(зеленый,красный),понимаю что гдето в сss нужно искать((( но где не знаю...подскажете?...

И последнее, автор пишет что можно так же сделать для проверки email ... Поскольку с AJAX разобраться легко не получится(((, может выделите те строки которые нужно менять...типа чайникам...?

Еще раз спасибо.
 
 
-1 Павел
11.09.2011 14:52
Я новичок! Подскажите пожалуйста, у меня есть форма регистрации, есть Evrsoft First Page HTML-editor, но когда проверяю её вместо сообщения "Регистрация успешна" вылетает reg.php.
Что мне делать чтобы связать всё воедино, может какая-то прога есть, заранее спасибо!
 
 
-1 Alex
24.10.2011 01:33
Добрый день, уважаемый автор, а Вы не подскажете как сделать AJAX проверку логина для virtuemart (не переходя на другую страницу). Спасибо!
 
 
-1 Виктор
07.02.2012 18:43
Пробую сделать, ни какой реакции. Помогите разобраться и запустить это...