Форум русской поддержки Joomla!® CMS
10.12.2016, 20:41:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

AJAX проверка логина и email

 (Прочитано 1710 раз)
0 Пользователей и 1 Гость смотрят эту тему.
stalkervp
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 44


« : 17.04.2013, 22:58:50 »

В общем прошу сильно не пинать гуру java, ajax`a  и т.п. (потому как сам несколько валенок в этом, и буду благодарен за критику).
Готового решения не нашел и поэтому как говорится "я его слепила из того что было" (а было это - http://joomla-book.ru/development/creating-component/ajax-login-check-registration). Итак:
1. Добавляем скрипт в два файла (у меня они в шаблоне)
    а)   \templates\ххххххх\html\com_virtuemart\user\edit.php   (примерно в строку 50 стразу за тегом </script>)
    б)   \templates\ххххххх\html\com_virtuemart\user\edit_address.php (примерно в строку 70 стразу за тегом </script>)

Код:
<script type="text/javascript">
<!--
window.addEvent("domready", function(){

// id проверяемого поля
document.id("username_field").addEvent("blur", function(){
//проверка на корректность заполнения поля
//стандартная валидация добавляет class invalid,
//если поле заполнено неправильно.
var regex=/invalid/g;
if (regex.test(this.get('class')) || this.value.length < 2) return;

//удаляем элемент в котором выводится результат если установлен
if(this.getNext('div')) this.getNext('div').destroy();

//создаем новый элемент для вывода сообщения результата проверки
var myElement = new Element('div');
myElement.inject(this, 'after');
myElement.addClass('login_response_txt');

 
//создаем AJAX запрос для проверки логина
var myRequest = new Request({
   url: 'index.php?option=com_users&task=check.name&format=raw',
   method: 'get',
   onRequest: function(){
       myElement.set('text', 'проверка');
   },
   onSuccess: function(responseText){
       myElement.set('text', responseText);
myElement.addClass('ok');
       if (responseText == 'занят') {
myElement.addClass('notok');
myElement.getPrevious('input').addClass('invalid');
       }
   },
   onFailure: function(){
       myElement.set('text', 'ошибка');
   }
});
//посылаем запрос с данными
myRequest.send('name='+this.value)
})

// id проверяемого поля
document.id("email_field").addEvent("blur", function(){
//проверка на корректность заполнения поля
//стандартная валидация добавляет class invalid,
//если поле заполнено неправильно.
var regex=/invalid/g;
if (regex.test(this.get('class')) || this.value.length < 2) return;
 
//удаляем элемент в котором выводится результат если установлен
if(this.getNext('div')) this.getNext('div').destroy();

//создаем новый элемент для вывода сообщения результата проверки
var myElement = new Element('div');
myElement.inject(this, 'after');
myElement.addClass('email_response_txt');
 
//создаем AJAX запрос для проверки email
var myRequest = new Request({
   url: 'index.php?option=com_users&task=check.email&format=raw',
   method: 'get',
   onRequest: function(){
       myElement.set('text', 'проверка');
       myElement.addClass('ajax-loader');
   },
   onSuccess: function(responseText){
       myElement.set('text', responseText);
myElement.addClass('ok');
       if (responseText == 'занят') {
myElement.addClass('notok');
myElement.getPrevious('input').addClass('invalid');
       }
   },
   onFailure: function(){
       myElement.set('text', 'ошибка');
   }
});
//посылаем запрос с данными
myRequest.send('email='+this.value)
})

})
//-->
</script>


2. создаем файл с именем check.raw.php в папке \components\com_users\controllers  (вот тут странно, пытался создать этот файл в контроллере VirtueMart, url перенаправлял на компонент VirtueMart, но почему то не заработало). Код:


Код:
<?php
 
defined('_JEXEC') or die('Restricted access');
 
jimport('joomla.application.component.controller');
 
class UsersControllerCheck extends JController
{
/**
* Метод проверки имени пользователя
*/
public function name()
{
 
$name = JRequest::getVar('name', null, 'GET');
 
if ($name) {
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('id');
$query->from('#__users');
$query->where('username = '. $db->quote($name));
$db->setQuery($query);
if ($db->loadResult()) {
die('занят');
} else {
die('свободен');
}
 
}
}

public function email()
{
 
$email = JRequest::getVar('email', null, 'GET');
 
if ($email) {
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('id');
$query->from('#__users');
$query->where('email = '. $db->quote($email));
$db->setQuery($query);
if ($db->loadResult()) {
die('занят');
} else {
die('свободен');
}
 
}
}

}


3. Добавляем стили (у меня это \templates\хххххххх\css\template.css)

Мой пример стилей:

Код:
.login_response_txt
{
font-size: 10px;
right: 55px;
top: 3px;
float: right;
position: relative;
width: 10px;
font-style:italic;
}

.email_response_txt
{
font-size: 10px;
right: 55px;
top: 3px;
float: right;
position: relative;
width: 10px;
font-style:italic;
}

.login_response_txt.ok,
.email_response_txt.ok
{
color: #090;
right: 55px;
}

.login_response_txt.notok,
.email_response_txt.notok
{
color: #F00;
right: 35px;
}

#username_field.invalid,
#email_field.invalid
{
border-color:#FF0000 !important;
}

Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1163


желаю вам счастья


« Ответ #1 : 25.04.2013, 17:38:32 »

вы бы понятнее написали, проверку на что вы осуществляете?  Smiley
Записан
bodr1982
Захожу иногда
**

Репутация: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 23


« Ответ #2 : 13.05.2016, 22:16:49 »

На Joomla 3.5.1 не работает (500 ошибка). Я так понимаю надо править check.raw.php в контроллере под 3-ю Joomla. Может кто подскажет что подправить надо?
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3595


« Ответ #3 : 14.05.2016, 01:37:22 »

странно, пытался создать этот файл в контроллере VirtueMart, url перенаправлял на компонент VirtueMart, но почему то не заработало
url: 'index.php?option=com_users&task=check.email&format=raw',

На Joomla 3.5.1 не работает (500 ошибка). Я так понимаю надо править check.raw.php в контроллере под 3-ю Joomla. Может кто подскажет что подправить надо?
class UsersControllerCheck extends JControllerLegacy
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet