Проверка имени пользователя и e-mail, регистрируемого пользователя на уникальность без перезагрузки страницы. Работает во всех браузерах. кроме IE 6.
Делалось и проверялось для версии VirtueMart 1.1.3, но также подходит для версии 1.1.4.
Находим файл: administrator/components/com_virtuemart/html/checkout_register_form.php
Открываем и ищем строчку 23:
$missing = vmGet( $_REQUEST, "missing", "" );
if (!empty( $missing )) {
echo "<script type=\"text/javascript\">alert('".$VM_LANG->_('CONTACT_FORM_NC',false)."'); </script>\n";
}
Заменяем на:
$missing = vmGet( $_REQUEST, "missing", "" );
?>
<script language="javascript" type="text/javascript">
function getUsername(){
var form = document.adminForm;
var unam = form.username.value;
if( !$('username_ticker') )
$('username_input').innerHTML = $('username_input').innerHTML + "<div id=\"username_ticker\" style=\"padding-top:10px;\"></div>";
$('username_field').value = unam;
if( form.username.value.length < 3 ) {
$('username_ticker').innerHTML = '<span style="background:#FFFFCC;border:1px solid #CC0000;color:red;font-weight:bold;padding:5px 5px 5px 5px;">Неверное Имя пользователя.</span>';
} else {
$('username_ticker').innerHTML = "<img src=\"<?php echo JURI::base()."images/wait.gif";?>\"> Checking";
var url = 'index.php?option=com_virtuemart&tasked=chkuserinfo&format=raw&what=uname';
url = url + '&uname=' + form.username.value;
new Ajax(url, {
method: 'get',
onComplete: function(x){
if(x == 1) {
$('username_ticker').innerHTML = '<span style="background:#FFFFCC;border:0px solid #CC0000;color:red;font-weight:bold;line-hight:30px;padding:5px 5px 5px 5px;">Это Имя пользователя (Логин) уже занято. </br> Пожалуйста используйте другое Имя пользователя</span>';
} else {
$('username_ticker').innerHTML = '<span style="border:1px none transparent;color:green;padding:5px 5px 5px 5px;">Имя пользователя (Логин) \''+ $('username_field').value +'\' свободно. Можно продолжать регистрацию</span>';
}
}
}).request();
}
}
function getEmail(){
var form = document.adminForm;
var eadd = form.email.value;
if( !$('email_ticker') )
$('email_input').innerHTML = $('email_input').innerHTML + "<div id=\"email_ticker\" style=\"padding-top:10px;\"></div>";
$('email_field').value = eadd;
if( !(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(form.email.value))) {
$('email_ticker').setHTML('<span style="background:#FFFFCC;border:1px solid #CC0000;color:red;font-weight:bold;padding:5px 5px 5px 5px;">Вы ввели неправильный e-mail адрес.</span>');
} else {
$('email_ticker').setHTML("<img src=\"<?php echo JURI::base()."images/wait.gif";?>\"> Checking");
var url = 'index.php?option=com_virtuemart&tasked=chkuserinfo&format=raw&what=email';
url = url + '&email=' + form.email.value;
new Ajax(url, {
method: 'get',
onComplete: function(x){
if(x == 1) {
$('email_ticker').setHTML('<span style="background:#FFFFCC;border:1px solid #CC0000;color:red;font-weight:bold;padding:5px 5px 5px 5px;">Этот e-mail уже зарегистрирован.</span>');
} else {
$('email_ticker').setHTML('<span style="border:1px none transparent;color:green;padding:5px 5px 5px 5px;">Этот e-mail \''+ $('email_field').value +'\' свободен. Можно продолжать регистрацию.</span>');
}
}
}).request();
}
}
</script>
<?php
if (!empty( $missing )) {
echo "<script type=\"text/javascript\">alert('".$VM_LANG->_('CONTACT_FORM_NC',false)."'); </script>\n";
}
Сохраняем файл в UTF-8 без ВОМ
Находим файл: administrator/components/com_virtuemart/classes/ps_userfield.php
Строка 390 после следующих строк:
case 'password':
case 'password2':
echo '<input type="password" id="'.$field->name.'_field" name="'.$field->name.'" size="30" class="inputbox" />'."\n";
break;
добавляем следующий код:
case 'email':
echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" class="inputbox" onchange="getEmail();" />'."\n";
break;
case 'username':
echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" maxlength="25" onchange="getUsername();" class="inputbox" />'."\n";
break;
После добавления должно выглядеть примерно так:
case 'password':
case 'password2':
echo '<input type="password" id="'.$field->name.'_field" name="'.$field->name.'" size="30" class="inputbox" />'."\n";
break;
case 'email':
echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" class="inputbox" onchange="getEmail();" />'."\n";
break;
case 'username':
echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" maxlength="25" onchange="getUsername();" class="inputbox" />'."\n";
break;
default:
Сохраняем файл
Находим файл: /components/com_virtuemart/virtuemart.php
Строка 21: вставляем после "global $mosConfig_absolute_path, $product_id, $vmInputFilter, $vmLogger;" следующий код:
$tasked = JRequest::getVar( 'tasked' );
if($tasked=="chkuserinfo"){
$database = & JFactory::getDBO();
$email = JRequest::getVar( 'email' );
$uname = JRequest::getVar( 'uname' );
$what = JRequest::getVar( 'what' );
$usercount = 0;
$emailcount = 0;
if($what == "uname"){
$database->setQuery("SELECT COUNT(*) FROM #__users WHERE username='$uname'");
$usercount = $database->loadResult();
if($usercount)
echo "1";
else
echo "0";
} else if ($what == "email") {
$database->setQuery("SELECT COUNT(*) FROM #__users WHERE email='$email'");
$emailcount = $database->loadResult();
if($emailcount)
echo "1";
else
echo "0";
}
die();
}
Сохраняем файл.
В папку сайта images закидываем файл-картинку, который во вложении. Он нужен будет для анимации пока идёт проверка.
Готово...
Удачи всем!
[вложение удалено Администратором]