В общем прошу сильно не пинать гуру 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;
}