Silent_Breeze
Осваиваюсь на форуме
 
Репутация: +31/-0
Offline
Сообщений: 158
|
 |
« : 21.10.2009, 03:44:09 » |
|
Проверка имени пользователя и 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 закидываем файл-картинку, который во вложении. Он нужен будет для анимации пока идёт проверка. Готово... Удачи всем!
|
|
|
|
|
beagler
Moderator
   
Репутация: +316/-4
Offline
Пол: 
Сообщений: 2994
http://beagler.ru/
|
 |
« Ответ #1 : 21.10.2009, 10:04:57 » |
|
+1 адназначна, так держать
|
|
|
|
|
Записан
|
|
|
|
VZup
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 27
|
 |
« Ответ #2 : 27.10.2009, 17:20:24 » |
|
все сделал по инструкции, не работает, кеш чистил
|
|
|
|
|
Записан
|
|
|
|
Silent_Breeze
Осваиваюсь на форуме
 
Репутация: +31/-0
Offline
Сообщений: 158
|
 |
« Ответ #3 : 27.10.2009, 17:45:35 » |
|
все сделал по инструкции, не работает, кеш чистил
Давайте адрес сайта - посмотрю...
|
|
|
|
|
Записан
|
|
|
|
VZup
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 27
|
 |
« Ответ #4 : 27.10.2009, 17:53:44 » |
|
адрес в личку написал
|
|
|
|
|
Записан
|
|
|
|
Silent_Breeze
Осваиваюсь на форуме
 
Репутация: +31/-0
Offline
Сообщений: 158
|
 |
« Ответ #5 : 27.10.2009, 19:12:39 » |
|
Проверьте ещё раз правильно ли вы вставили код? Номера строк необязательно будут совпадать, тем более, если вы уже правили код файлов. Ориентируйтесь по кускам кода до и после вставляемых частей.
|
|
|
|
|
Записан
|
|
|
|
VZup
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 27
|
 |
« Ответ #6 : 27.10.2009, 20:34:13 » |
|
еще раз все проверил, увы, не работает
может еще какой-то файлик править нужно?
|
|
|
|
|
Записан
|
|
|
|
Silent_Breeze
Осваиваюсь на форуме
 
Репутация: +31/-0
Offline
Сообщений: 158
|
 |
« Ответ #7 : 27.10.2009, 23:31:25 » |
|
Во вложении файлы, которые правились. Разложите их ПРАВИЛЬНО по нужным папкам.
|
|
|
|
|
Записан
|
|
|
|
VZup
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 27
|
 |
« Ответ #8 : 28.10.2009, 11:25:22 » |
|
Как оказалось, у меня вообще не происходит проверка на дублирование имени и электронной почты при регистрации. Ни с помощью AJAX, ни в обычном режиме. Может галку где поставить? Вообще догнать не могу 
|
|
|
|
|
Записан
|
|
|
|
Silent_Breeze
Осваиваюсь на форуме
 
Репутация: +31/-0
Offline
Сообщений: 158
|
 |
« Ответ #9 : 28.10.2009, 15:23:30 » |
|
Попробуйте с другим шаблоном.
|
|
|
|
|
Записан
|
|
|
|
VZup
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 27
|
 |
« Ответ #10 : 28.10.2009, 17:12:00 » |
|
Попробуйте с другим шаблоном.
ё-ё-ё-ё-ё.... Спасибо за подсказку, когда делал шаблон, забыл вставить вывод сообщений
|
|
|
|
|
Записан
|
|
|
|
Silent_Breeze
Осваиваюсь на форуме
 
Репутация: +31/-0
Offline
Сообщений: 158
|
 |
« Ответ #11 : 28.10.2009, 18:14:49 » |
|
Всегда полжалуйста 
|
|
|
|
|
Записан
|
|
|
|
Dimas888
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 59
Учусь....
|
 |
« Ответ #12 : 29.10.2009, 00:58:48 » |
|
Подскажите где почитать про вывод сообщений а то в моём шаблоне тоже не работает а в другом работает?
|
|
|
|
|
Записан
|
|
|
|
Dimas888
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 59
Учусь....
|
 |
« Ответ #13 : 29.10.2009, 11:16:20 » |
|
Спасибо разобрался надо было вставить ещё <?php JHTML::_('behavior.mootools'); ?>
|
|
|
|
|
Записан
|
|
|
|
Figaro
Захожу иногда

Репутация: +2/-0
Offline
Сообщений: 11
|
 |
« Ответ #14 : 11.02.2010, 02:15:01 » |
|
Проблема!
После регистрации, когда войти в управления своей записью - пропадает поля e-mail и логин
Кто что подскажет
|
|
|
|
|
Записан
|
|
|
|
Dimas888
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 59
Учусь....
|
 |
« Ответ #15 : 11.02.2010, 20:23:13 » |
|
В настройках магазина, управление полями вводимых пользователем, включить отображать показать в разделе учётной записью. Сообщение здесь немного не в тему
|
|
|
|
|
Записан
|
|
|
|
Figaro
Захожу иногда

Репутация: +2/-0
Offline
Сообщений: 11
|
 |
« Ответ #16 : 12.02.2010, 00:40:40 » |
|
Cобщение в тему!
После установки даного хака!
1. Регистрация работает нормально - поля проверяются с помощью AJAX
2. Но если пользователь входит в кправление своей учетной записью то в поля e-mail и user пусто!
3. Если убрать хак то в поле e-mail появляется e-mail - который пользователь вводил при регистрации...
4. Как исправить?
|
|
|
|
« Последнее редактирование: 12.02.2010, 00:56:06 от Figaro »
|
Записан
|
|
|
|
Silent_Breeze
Осваиваюсь на форуме
 
Репутация: +31/-0
Offline
Сообщений: 158
|
 |
« Ответ #17 : 12.02.2010, 02:25:09 » |
|
просто поле e-mail ждёт вввода для проверки....
|
|
|
|
|
Записан
|
|
|
|
Figaro
Захожу иногда

Репутация: +2/-0
Offline
Сообщений: 11
|
 |
« Ответ #18 : 12.02.2010, 16:22:05 » |
|
Как его исправить
|
|
|
|
|
Записан
|
|
|
|
bigbug
Захожу иногда

Репутация: +1/-0
Offline
Сообщений: 12
|
 |
« Ответ #19 : 17.02.2010, 17:29:59 » |
|
Действительно, подскажите как исправить. Функция мега-клёвая, но этот недостаток мешает.
|
|
|
|
|
Записан
|
|
|
|
Shin
Захожу иногда

Репутация: +1/-0
Offline
Сообщений: 8
|
 |
« Ответ #20 : 22.10.2010, 00:26:59 » |
|
Вместо 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
   
Репутация: +316/-4
Offline
Пол: 
Сообщений: 2994
http://beagler.ru/
|
 |
« Ответ #21 : 17.12.2010, 12:52:56 » |
|
только ещё надо сообщение подправить - вместо "Можно продолжать регисрацию" - "Можно продолжать регистрацию"
|
|
|
|
|
Записан
|
|
|
|
Silent_Breeze
Осваиваюсь на форуме
 
Репутация: +31/-0
Offline
Сообщений: 158
|
 |
« Ответ #22 : 17.12.2010, 15:38:28 » |
|
угу. Поправил...
|
|
|
|
|
Записан
|
|
|
|
beagler
Moderator
   
Репутация: +316/-4
Offline
Пол: 
Сообщений: 2994
http://beagler.ru/
|
 |
« Ответ #23 : 17.12.2010, 17:39:11 » |
|
реализовал, поставил свои стили, добавил jquery валидацию остальных полей, туда же регистрацию юрлиц, со скрытием/показом блока в зависимости от вида покупателя - просто конфета 
|
|
|
|
|
Записан
|
|
|
|
beagler
Moderator
   
Репутация: +316/-4
Offline
Пол: 
Сообщений: 2994
http://beagler.ru/
|
 |
« Ответ #24 : 18.12.2010, 01:16:23 » |
|
и ещё вместо $email = JRequest::getVar( 'email' ); $uname = JRequest::getVar( 'uname' ); лучше $email = $vmInputFilter->safeSQL(JRequest::getVar( 'email' )); $uname = $vmInputFilter->safeSQL(JRequest::getVar( 'uname' ));
|
|
|
|
|
Записан
|
|
|
|
TakT
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Пол: 
Сообщений: 111
|
 |
« Ответ #25 : 07.01.2011, 21:10:21 » |
|
и ещё вместо $email = JRequest::getVar( 'email' ); $uname = JRequest::getVar( 'uname' ); лучше $email = $vmInputFilter->safeSQL(JRequest::getVar( 'email' )); $uname = $vmInputFilter->safeSQL(JRequest::getVar( 'uname' )); кстати после этих изминений только у меня перестает рабоатать AJAX срабатывает gif ка и все, и не чего не выдеат
|
|
|
|
|
Записан
|
|
|
|
|
gaa
Гость
|
 |
« Ответ #26 : 14.01.2011, 22:36:43 » |
|
Доброго здоровья!
Поставил все как сказано. Но.... не работает нормально, огоньки бегают и даже, что то сравнивает, делает...
И на уже занятые имя пользователя и емейл пишет - Этот e-mail свободен. Можно продолжать регистрацию.
Где и что поправить, чтобы он видел занятые логины и почту? И писал что они заняты.
Стоит на локальной машине, работает на Denwer VirtueMart 1.1.4 stable Joomla 1.5.16
|
|
|
|
« Последнее редактирование: 14.01.2011, 22:43:45 от gaa »
|
Записан
|
|
|
|
korkunov
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 143
|
 |
« Ответ #27 : 19.01.2011, 01:03:43 » |
|
Спасибо разобрался надо было вставить ещё <?php JHTML::_('behavior.mootools'); ?>
В самое начало файла VirtueMart.php
|
|
|
|
|
Записан
|
|
|
|
korkunov
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 143
|
 |
« Ответ #28 : 19.01.2011, 01:31:36 » |
|
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
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 143
|
 |
« Ответ #29 : 19.01.2011, 01:33:25 » |
|
И еще в догонку. сверстать бы эту страницу (регистрации) в виде таблицы, т.е. несколько колонок. А то она длинная, как то неказисто 
|
|
|
|
|
Записан
|
|
|
|
|