Оформление вывода ошибок при регистрации

+15
2.19K
Версия: InstantCMS v1.7

Многие заметили, что во время регистрации сообщения об ошибках регистрации выводятся где то вверху окна, перед самой формой регистрации, что я вам скажу совсем не по феншую. Эти ошибки не видны и не заметны пользователю, он может и не обратить на них внимание и уйти с формы регистрации совсем, что совсем не есть хорошо. По сему нужно указать, где при регистрации непосредственно ошибочки возникают и так, начнем править код.
Для начала лезем в файл компоненты регистрации: /components/registration/frontend.php
В нем правим переменную $msg. Она определена как срока, а мы её сделаем массивом ошибок, с которым мы и будем работать при выводе в файле /templates/мой_шаблон/components/com_registration.tpl
И так открываем файл и со строки 134 после
  1.  
  2. if ($do=='register'){
  3.  
  4. $inPage->setTitle($_LANG['REGISTRATION']);
  5.  
меняем код до строки 280 там где
  1. if ($do=='view' || @count($msg)>0){
  1.  
  2. $msg = array();
  3. // Проверяем логин и пароль
  4. $login = $inCore->request('login', 'str', '');
  5. $pass = $inCore->request('pass', 'str', '');
  6. $pass2 = $inCore->request('pass2', 'str', '');
  7.  
  8. if(strlen($login)<2) { $msg['LOGIN'] = $_LANG['TYPE_LOGIN'].'
  9. '; }
  10. if ((!preg_match("/^([a-zA-Z0-9])+$/i", $login)) && strlen($login)>=2) {$msg['LOGIN'] = $_LANG['ERR_LOGIN'].'
  11. '; }
  12. if(!$pass) { $msg['PASSWORD'] = $_LANG['TYPE_PASS'].'
  13. '; }
  14. if($pass && !$pass2) { $msg['PASSWORD'] = $_LANG['TYPE_PASS_TWICE'].'
  15. '; }
  16. if($pass && $pass2 && strlen($pass)<3) { $msg['PASSWORD'] = $_LANG['PASS_SHORT'].'
  17. '; }
  18. if($pass && $pass2 && $pass != $pass2) { $msg['PASSWORD'] = $_LANG['WRONG_PASS'].'
  19. '; }
  20.  
  21. // Проверяем nickname или имя и фамилию
  22. if($cfg['name_mode']=='nickname'){
  23. $nickname = $inCore->request('nickname', 'str', '');
  24. if(!$nickname) { $msg['NICKNAME']= $_LANG['TYPE_NICKNAME'].'
  25. '; }
  26. } else {
  27. $namemsg = '';
  28. $realname1 = $inCore->request('realname1', 'str', '');
  29. $realname2 = $inCore->request('realname2', 'str', '');
  30. if(!$realname1) { $namemsg .= $_LANG['TYPE_NAME'].'
  31. '; }
  32. if(!$realname2) { $namemsg .= $_LANG['TYPE_SONAME'].'
  33. '; }
  34. if (!$namemsg){
  35. $nickname = trim($realname1) . ' ' . trim($realname2);
  36. } else {
  37. $msg['NAME']= $namemsg;
  38. }
  39. }
  40. if($model->getBadNickname($nickname)){
  41. $msg['NICKNAME'] = $_LANG['ERR_NICK_EXISTS'].'
  42. ';
  43. }
  44. // Проверяем email
  45. $email = $inCore->request('email', 'email');
  46. if(!$email) {
  47. $msg['EMAIL'] = $_LANG['ERR_EMAIL'].'
  48. ';
  49. }
  50. // Если есть опция показывать ДР при регистрации, то проверяем
  51. if ($cfg['ask_birthdate']){
  52. $birthdate = (int)$_REQUEST['birthdate']['year'].'-'.(int)$_REQUEST['birthdate']['month'].'-'.(int)$_REQUEST['birthdate']['day'];
  53. } else {
  54. $birthdate = '1980-01-01';
  55. }
  56. // Если есть опция показывать icq при регистрации, то проверяем
  57. if ($cfg['ask_icq']){
  58. $icq = $inCore->request('icq', 'str', '');
  59. $icq = preg_replace('/([^0-9])/i', '', $icq);
  60. } else {
  61. $icq = '';
  62. }
  63. // Проверяем каптчу
  64. $code = $inCore->request('code', 'str');
  65. if(!$code) { $msg['CAPTCHA']= $_LANG['TYPE_CAPTCHA'].'
  66. '; }
  67.  
  68. if(count($msg)==0){
  69.  
  70. if ($inCore->checkCaptchaCode($code)){
  71. $sql = "SELECT id, login, email FROM cms_users WHERE (login LIKE '$login' OR email LIKE '$email') AND (is_deleted = 0)";
  72. $result = $inDB->query($sql) ;
  73. if($inDB->num_rows($result)==0){
  74.  
  75. $is_locked = $cfg['act'];
  76. $send_pass = $pass;
  77. $pass = md5($pass);
  78.  
  79. $user_array = array(
  80. 'login'=>$login,
  81. 'nickname'=>$nickname,
  82. 'email'=>$email,
  83. 'icq'=>$icq,
  84. 'birthdate'=>$birthdate,
  85. 'is_locked'=>$is_locked
  86. );
  87.  
  88. cmsCore::callEvent('USER_BEFORE_REGISTER', $user_array);
  89.  
  90. if (cmsUser::sessionGet('invite_code')){
  91.  
  92. $invite_code = cmsUser::sessionGet('invite_code');
  93. $invited_by = (int)$users_model->getInviteOwner($invite_code);
  94.  
  95. if ($invited_by){ $users_model->closeInvite($invite_code); }
  96.  
  97. cmsUser::sessionDel('invite_code');
  98.  
  99. } else {
  100. $invited_by = 0;
  101. }
  102.  
  103. $sql = "INSERT INTO cms_users (login, nickname, password, email, icq, regdate, logdate, birthdate, is_locked, invited_by)
  104. VALUES ('$login', '$nickname', '$pass', '$email', '$icq', NOW(), NOW(), '$birthdate', '$is_locked', '{$invited_by}')";
  105. $inDB->query($sql) ;
  106.  
  107. $new_user_id = dbLastId('cms_users');
  108.  
  109. //create advanced user profile
  110. if ($new_user_id){
  111.  
  112. $usr = $inDB->fetch_assoc($result);
  113. $sql = "INSERT INTO cms_user_profiles (user_id, city, description, showmail, showbirth, showicq, karma, imageurl, allow_who)
  114. VALUES (".$new_user_id.", '', '', '0', '0', '1', '0', '', 'all')";
  115. $inDB->query($sql) ;
  116.  
  117. $user_array['id'] = $new_user_id;
  118. cmsCore::callEvent('USER_REGISTER', $user_array);
  119.  
  120. }
  121.  
  122. if ($is_locked){
  123. sendActivationNotice($send_pass, $new_user_id);
  124. $inPage->includeTemplateFile('special/regactivate.php');
  125. $inCore->halt();
  126. } else {
  127. // Регистрируем событие
  128. cmsActions::log('add_user', array(
  129. 'object' => '',
  130. 'user_id' => $new_user_id,
  131. 'object_url' => '',
  132. 'object_id' => $new_user_id,
  133. 'target' => '',
  134. 'target_url' => '',
  135. 'target_id' => 0,
  136. 'description' => ''
  137. ));
  138. $inPage->includeTemplateFile('special/regcomplete.php');
  139.  
  140. if ($cfg['send_greetmsg']){ $model->sendGreetsMessage($new_user_id, $cfg['greetmsg']); }
  141.  
  142. $inCore->halt();
  143. }
  144.  
  145. } else {
  146. $u = $inDB->fetch_assoc($result);
  147. if ($login == $u['login']) { $msg['LOGIN'] = $_LANG['LOGIN'].' "'.$login.'" '.$_LANG['IS_BUSY']; }
  148. elseif ($email == $u['email']) { $msg['EMAIL'] = $_LANG['EMAIL_IS_BUSY']; }
  149. }
  150. } else {
  151. $msg['CAPTCHA'] = $_LANG['ERR_CAPTCHA'];
  152. }
  153.  
  154. }
  155.  
  156. }
  157.  
  158. //======================================================================================================================//
  159.  
  160. if ($do=='view' || @count($msg)>0){
  161.  
Ну вот собственно почву мы и подготовили, а теперь в шаблоне можно как угодно извращаться на тему оформления вывода ошибок.
Я же в шаблоне оформил вывод ошибок после самих полей ввода следующим образом, например для логина:
  1. {if $msg.LOGIN}<div class="red">{$msg.LOGIN}</div>{/if}
Для оформления у нас теперь массив ошибок со значениями этих ошибок
{$msg.LOGIN} — логин
{$msg.PASSWORD} — пароль
{$msg.INVITE} — инвайт
{$msg.CAPTCHA} — капча
{$msg.NICKNAME} — ник
{$msg.NAME} — имя
{$msg.EMAIL} — мыло

Для наглядности можно посмотреть, что получилось www.oxuxo.ru/registration

Желаю удачи!
Нет комментариев. Ваш будет первым!

Еще от автора

Простая регистрация пользователей
Версия: InstantCMS v1.7 Давно ведутся споры по поводу регистрации пользователей на сайте. Нужны ли те или иные поля, никнейм, логин и тд.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.