0 Пользователей и 1 Гость просматривают эту тему.
  • 60 Ответов
  • 18969 Просмотров
*

Silent_Breeze

  • Захожу иногда
  • 171
  • 33 / 0
Проверка имени пользователя и 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";?>\">&nbsp;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";?>\">&nbsp;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 закидываем файл-картинку, который во вложении. Он нужен будет для анимации пока идёт проверка.

Готово...

Удачи всем!

[вложение удалено Администратором]
« Последнее редактирование: 17.12.2010, 14:37:54 от Silent_Breeze »
Здесь всё есть... просто нужно поискать немного... ;)
*

VZup

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
все сделал по инструкции, не работает, кеш чистил
*

Silent_Breeze

  • Захожу иногда
  • 171
  • 33 / 0
все сделал по инструкции, не работает, кеш чистил

Давайте адрес сайта - посмотрю...
Здесь всё есть... просто нужно поискать немного... ;)
*

VZup

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
адрес в личку написал
*

Silent_Breeze

  • Захожу иногда
  • 171
  • 33 / 0
Проверьте ещё раз правильно ли вы вставили код? Номера строк необязательно будут совпадать, тем более, если вы уже правили код файлов. Ориентируйтесь по кускам кода до и после вставляемых частей.
Здесь всё есть... просто нужно поискать немного... ;)
*

VZup

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
еще раз все проверил, увы, не работает

может еще какой-то файлик править нужно?
*

Silent_Breeze

  • Захожу иногда
  • 171
  • 33 / 0
Во вложении файлы, которые правились. Разложите их ПРАВИЛЬНО по нужным папкам.

[вложение удалено Администратором]
Здесь всё есть... просто нужно поискать немного... ;)
*

VZup

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
Как оказалось, у меня вообще не происходит проверка на дублирование имени и электронной почты при регистрации. Ни с помощью AJAX, ни в обычном режиме. Может галку где поставить? Вообще догнать не могу :(
*

Silent_Breeze

  • Захожу иногда
  • 171
  • 33 / 0
Попробуйте с другим шаблоном.
Здесь всё есть... просто нужно поискать немного... ;)
*

VZup

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
Попробуйте с другим шаблоном.
ё-ё-ё-ё-ё.... Спасибо за подсказку, когда делал шаблон, забыл вставить вывод сообщений
*

Silent_Breeze

  • Захожу иногда
  • 171
  • 33 / 0
Всегда полжалуйста :)
Здесь всё есть... просто нужно поискать немного... ;)
*

Dimas888

  • Захожу иногда
  • 62
  • 2 / 0
Подскажите где почитать про вывод сообщений а то в моём шаблоне тоже не работает а в другом работает?
*

Dimas888

  • Захожу иногда
  • 62
  • 2 / 0
Спасибо разобрался надо было вставить ещё <?php JHTML::_('behavior.mootools'); ?>
*

Figaro

  • Осваиваюсь на форуме
  • 12
  • 2 / 0
Проблема!

После регистрации, когда войти в управления своей записью - пропадает поля e-mail и логин

Кто что подскажет
*

Dimas888

  • Захожу иногда
  • 62
  • 2 / 0
В настройках магазина,  управление полями вводимых пользователем, включить отображать показать в разделе учётной записью. Сообщение здесь немного не в тему
*

Figaro

  • Осваиваюсь на форуме
  • 12
  • 2 / 0
Cобщение в тему!

После установки даного хака!

1. Регистрация работает нормально - поля проверяются с помощью AJAX

2. Но если пользователь входит в кправление своей учетной записью то в поля e-mail и user пусто!

3. Если убрать хак то в поле e-mail появляется e-mail - который пользователь вводил при регистрации...

4. Как исправить?
« Последнее редактирование: 11.02.2010, 23:56:06 от Figaro »
*

Silent_Breeze

  • Захожу иногда
  • 171
  • 33 / 0
просто поле e-mail ждёт вввода для проверки....
Здесь всё есть... просто нужно поискать немного... ;)
*

Figaro

  • Осваиваюсь на форуме
  • 12
  • 2 / 0
Как его исправить
*

bigbug

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Действительно, подскажите как исправить. Функция мега-клёвая, но этот недостаток мешает.
*

Shin

  • Новичок
  • 5
  • 1 / 0
Вместо
Цитировать
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 'email':
               echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" class="inputbox" onchange="getEmail();"  value="'. ($db->sf($field->name, true, false)?$db->sf($field->name, true, false):'').'"/>'."\n";
                  break;
               
            case 'username':
               echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" maxlength="25" onchange="getUsername();" class="inputbox"  value="'. ($db->sf($field->name, true, false)?$db->sf($field->name, true, false):'').'"/>'."\n";
                  break;

тогда в аккаунте будет заполнено.
Кстати, в ИЕ 6 тоже работает отлично. Спасибо автору темы.
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
только ещё надо сообщение подправить - вместо "Можно продолжать регисрацию" - "Можно продолжать регистрацию"
*

Silent_Breeze

  • Захожу иногда
  • 171
  • 33 / 0
угу. Поправил...
Здесь всё есть... просто нужно поискать немного... ;)
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
реализовал, поставил свои стили, добавил jquery валидацию остальных полей, туда же регистрацию юрлиц, со скрытием/показом блока в зависимости от вида покупателя - просто конфета :)
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
и ещё вместо
Код
	$email 		= JRequest::getVar( 'email' );
$uname = JRequest::getVar( 'uname' );
лучше
Код
	$email 		= $vmInputFilter->safeSQL(JRequest::getVar( 'email' ));
$uname = $vmInputFilter->safeSQL(JRequest::getVar( 'uname' ));
*

TakT

  • Захожу иногда
  • 124
  • 8 / 0
и ещё вместо
Код
	$email 		= JRequest::getVar( 'email' );
$uname = JRequest::getVar( 'uname' );
лучше
Код
	$email 		= $vmInputFilter->safeSQL(JRequest::getVar( 'email' ));
$uname = $vmInputFilter->safeSQL(JRequest::getVar( 'uname' ));

кстати после этих изминений только у меня перестает рабоатать AJAX

срабатывает gif ка и все, и не чего не выдеат

Доброго здоровья!

Поставил все как сказано.
Но....
не работает нормально,
огоньки бегают и даже, что то сравнивает, делает...

И на уже занятые имя пользователя и емейл пишет -
Этот e-mail  свободен. Можно продолжать регистрацию.

Где и что поправить, чтобы он видел занятые логины и почту?
И писал что они заняты.

Стоит на локальной машине, работает на Denwer
VirtueMart 1.1.4 stable Joomla 1.5.16
« Последнее редактирование: 14.01.2011, 21:43:45 от gaa »
*

korkunov

  • Захожу иногда
  • 127
  • 1 / 0
Спасибо разобрался надо было вставить ещё <?php JHTML::_('behavior.mootools'); ?>
В самое начало файла VirtueMart.php
*

korkunov

  • Захожу иногда
  • 127
  • 1 / 0
Hi. Thanks.
Вот еще бы проверку паролей на Аяксе.
Я ПХП не силен. может кто прикрутит скрипт, У мну не получилось  >:(
Это в checkout_register_form.php в начале, где скрипт...

function passwordMatch()
{
if ( password2 != "")
   {
   if ( password == password2 )
      {
         document.getElementById("password2").setAttribute("class", "user-valid");
         document.getElementById('password2').innerHTML="";
      }
   else
      {
         document.getElementById("password2").setAttribute("class", "user-invalid");
         document.getElementById('password2').innerHTML="Пароль: Введенные значения не совпадают!";   
      }
   }
else
   {
      document.getElementById("password2").setAttribute("class", "user-invalid");
      document.getElementById('password2').innerHTML="Поле обязательно к заполнению!";
   }
}
*

korkunov

  • Захожу иногда
  • 127
  • 1 / 0
И еще в догонку.
сверстать бы эту страницу (регистрации) в виде таблицы, т.е. несколько колонок. А то она длинная, как то неказисто  :(
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Перенаправление на /index.php vm 1.1.3

Автор Wester

Ответов: 22
Просмотров: 34298
Последний ответ 08.03.2012, 16:12:53
от phaeton480
Мультивалютность в VirtueMart 1.1.4 (ajax форме/joomla 1.5.14)

Автор zafarkhon

Ответов: 6
Просмотров: 7823
Последний ответ 11.11.2010, 18:40:57
от MixaJI
Как добавить имя вендора в browse_1 ?

Автор Smalish

Ответов: 4
Просмотров: 2667
Последний ответ 26.11.2009, 19:36:28
от Smalish
Нумерация заказов от начала года 235/06, 238/06... (Решен

Автор Web_2

Ответов: 2
Просмотров: 2974
Последний ответ 04.11.2009, 22:04:56
от GDA
[Решено] Ajax модуль поиска для Virtuemart V1.1.3

Автор Виталик

Ответов: 16
Просмотров: 6127
Последний ответ 27.09.2009, 15:23:43
от Виталик