Битрикс. Регистрация и авторизация. Часть 2 из 3
20.07.2018
Теги: API • CMS • Web-разработка • Авторизация • Битрикс • Компонент • Регистрация • Форма • ШаблонКомпонента
Возможности системного компонента регистрации довольно скромные: нет возможности добавить свои поля, сделать их обязательными для заполнения. Для реализации таких возможностей есть компонент «Настраиваемая регистрация», который позволяет настроить и разместить на сайте свою форму регистрации. В визуальном редакторе компонент расположен по пути: «Служебные • Пользователь • Настраиваемая регистрация».
Пример вызова компонента
<?php $APPLICATION->IncludeComponent( // Настраиваемая регистрация "bitrix:main.register", "", array( "AUTH" => "Y", // Автоматически авторизовать пользователей "REQUIRED_FIELDS" => array( // Поля, обязательные для заполнения 0 => "EMAIL", 1 => "NAME", 2 => "LAST_NAME", ), "SET_TITLE" => "Y", // Устанавливать заголовок страницы "SHOW_FIELDS" => array( // Поля, которые показывать в форме 0 => "EMAIL", 1 => "NAME", 2 => "LAST_NAME", ), "SUCCESS_PAGE" => "", // Страница окончания регистрации "USER_PROPERTY" => "", // Показывать дополнительные свойства "USER_PROPERTY_NAME" => "", // Название блока пользовательских свойств "USE_BACKURL" => "N", // Отправлять пользователя по обратной ссылке ), false ); ?>
Создадим страницу /auth/register.php
, разместим на ней вызов компонента «Настраиваемая регистрация». В настройках компонента выберем поля, которые надо показывать:
[EMAIL] E-mail
[NAME] Имя
[LAST_NAME] Фамилия
[PERSONAL_PHONE] Телефон
[WORK_COMPANY] Наименование компании
[WORK_PHONE] Телефон (рабочий)
И укажем поля, обязательные для заполнения:
[EMAIL] E-mail
[NAME] Имя
[LAST_NAME] Фамилия
[PERSONAL_PHONE] Телефон
После этого страница /auth/register.php
содержит следующий код:
<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle("Регистрация"); ?> <?php $APPLICATION->IncludeComponent( "bitrix:main.register", ".default", array( "AUTH" => "N", "COMPONENT_TEMPLATE" => ".default", "REQUIRED_FIELDS" => array( 0=>"EMAIL", 1=>"NAME", 2=>"LAST_NAME", 3=>"PERSONAL_PHONE", ), "SET_TITLE" => "Y", "SHOW_FIELDS" => array( 0=>"EMAIL", 1=>"NAME", 2=>"LAST_NAME", 3=>"PERSONAL_PHONE", 4=>"WORK_COMPANY", 5=>"WORK_PHONE", ), "SUCCESS_PAGE" => "/auth/", "USER_PROPERTY" => array(), "USER_PROPERTY_NAME" => "", "USE_BACKURL" => "N" ) ); ?> <?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>
И имеет такой вид:
Теперь нам надо кастомизировать форму регистрации под наш дизайн. Для этого копируем шаблон компонента:
- откуда:
bitrix/components/bitrix/main.register/templates/.default
- куда:
local/templates/.default/components/bitrix/main.register/.default
После внесения изменений получилось так:
<? /* * Файл local/templates/.default/components/bitrix/main.register/.default/template.php */ if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); ?> <?php if ($USER->IsAuthorized()): /* если пользователь уже авторизован */ ?> <p><?= GetMessage('MAIN_REGISTER_REG_AUTH'); /* Вы зарегистрированы и авторизованы */ ?></p> <?php return ?> <?php endif; ?> <div class="bitrix-main-register"> <h2><?= GetMessage('MAIN_REGISTER_FORM_TITLE'); /* заголовок формы */ ?></h2> <?php if (count($arResult["ERRORS"]) > 0): /* сообщения об ошибках при заполнении формы */ ?> <?php foreach ($arResult["ERRORS"] as $key => $error) { if (intval($key) == 0 && $key !== 0) { $arResult["ERRORS"][$key] = str_replace( "#FIELD_NAME#", '«'.GetMessage('MAIN_REGISTER_'.$key).'»', $error ); } } ShowError(implode("<br />", $arResult["ERRORS"])); ?> <?php elseif ($arResult["USE_EMAIL_CONFIRMATION"] === "Y"): ?> <p><?= GetMessage('MAIN_REGISTER_EMAIL_HELP'); /* будет отправлено письмо для подтверждения */ ?></p> <?php endif; ?> <form method="post" action="<?= POST_FORM_ACTION_URI; ?>" name="regform" enctype="multipart/form-data"> <?php if ($arResult["BACKURL"] <> ''): ?> <input type="hidden" name="backurl" value="<?= $arResult["BACKURL"]; ?>" /> <?php endif; ?> <?php foreach ($arResult["SHOW_FIELDS"] as $FIELD): ?> <?php if ($FIELD == "AUTO_TIME_ZONE" && $arResult["TIME_ZONE_ENABLED"]): /* часовой пояс */ ?> <!-- код удален --> <?php continue; ?> <?php endif; ?> <div> <span> <?= GetMessage('MAIN_REGISTER_'.$FIELD); /* очередное поле */ ?> <?php if ($arResult["REQUIRED_FIELDS_FLAGS"][$FIELD] == "Y"): ?> <i>*</i> <!-- поле обязательно для заполнения --> <?php endif; ?> </span> <span> <?php if ($FIELD == "PASSWORD"): /* пароль */ ?> <input type="password" name="REGISTER[<?= $FIELD; ?>]" value="<?= $arResult["VALUES"][$FIELD]; ?>" autocomplete="off" /> <?php if ($arResult["SECURE_AUTH"]): /* безопасная авторизация */ ?> <!-- код удален --> <?php endif; ?> <?php elseif ($FIELD == "CONFIRM_PASSWORD"): /* подтверждение пароля */ ?> <input type="password" name="REGISTER[<?= $FIELD; ?>]" value="<?= $arResult["VALUES"][$FIELD]; ?>" autocomplete="off" /> <?php elseif ($FIELD == "PERSONAL_GENDER"): /* пол: мужской, женский */ ?> <select name="REGISTER[<?= $FIELD; ?>]"> <option value=""> <?= GetMessage('MAIN_REGISTER_USER_UNKNOWN'); ?> </option> <option value="M"<?= $arResult["VALUES"][$FIELD] == 'M' ? ' selected="selected"' : ''; ?>> <?= GetMessage('MAIN_REGISTER_USER_MALE'); ?> </option> <option value="F"<?= $arResult["VALUES"][$FIELD] == 'F' ? ' selected="selected"' : ''; ?>> <?= GetMessage('MAIN_REGISTER_USER_FEMALE'); ?> </option> </select> <?php elseif (in_array($FIELD, array("PERSONAL_COUNTRY", "WORK_COUNTRY"))): /* страна проживания или работы */ ?> <select name="REGISTER[<?= $FIELD; ?>]"> <?php foreach ($arResult["COUNTRIES"]["reference_id"] as $key => $value): ?> <?php $selected = ($value == $arResult["VALUES"][$FIELD]) ? ' selected="selected"' : ''; ?> <option value="<?= $value; ?>"<?= $selected; ?>> <?= $arResult["COUNTRIES"]["reference"][$key]; ?> </option> <?php endforeach; ?> </select> <?php elseif (in_array($FIELD, array("PERSONAL_PHOTO", "WORK_LOGO"))): /* личное фото */ ?> <input type="file" name="REGISTER_FILES_<?= $FIELD; ?>" /> <?php elseif (in_array($FIELD, array("PERSONAL_NOTES", "WORK_NOTES"))): ?> <textarea name="REGISTER[<?= $FIELD; ?>]"> <?= $arResult["VALUES"][$FIELD]; ?> </textarea> <?php elseif ($FIELD == "PERSONAL_BIRTHDAY"): /* дата рождения */ ?> <small><?= $arResult["DATE_FORMAT"]; ?></small><br /> <input size="30" type="text" name="REGISTER[<?= $FIELD; ?>]" value="<?= $arResult["VALUES"][$FIELD]; ?>" /> <?php $APPLICATION->IncludeComponent( 'bitrix:main.calendar', '', array( 'SHOW_INPUT' => 'N', 'FORM_NAME' => 'regform', 'INPUT_NAME' => 'REGISTER[PERSONAL_BIRTHDAY]', 'SHOW_TIME' => 'N' ), null, array("HIDE_ICONS"=>"Y") ); ?> <?php else: ?> <input type="text" name="REGISTER[<?= $FIELD; ?>]" value="<?= $arResult["VALUES"][$FIELD]; ?>" /> <?php endif; ?> </span> </div> <?php endforeach; ?> <?php /***** User properties *****/ ?> <?php if($arResult["USER_PROPERTIES"]["SHOW"] == "Y"): ?> <h3> <?= empty($arParams["USER_PROPERTY_NAME"]) ? GetMessage("USER_TYPE_EDIT_TAB") : $arParams["USER_PROPERTY_NAME"]; ?> </h3> <?php foreach ($arResult["USER_PROPERTIES"]["DATA"] as $FIELD_NAME => $arUserField): ?> <div> <span> <?= $arUserField["EDIT_FORM_LABEL"]; ?> <?php if ($arUserField["MANDATORY"]=="Y"): ?> <i>*</i> <!-- поле обязательно для заполнения --> <?php endif; ?> </span> <span> <?php $APPLICATION->IncludeComponent( "bitrix:system.field.edit", $arUserField["USER_TYPE"]["USER_TYPE_ID"], array( "bVarsFromForm" => $arResult["bVarsFromForm"], "arUserField" => $arUserField, "form_name" => "regform" ), null, array("HIDE_ICONS"=>"Y") ); ?> </span> </div> <?php endforeach; ?> <?php endif; ?> <?php /***** User properties *****/ ?> <?php if ($arResult["USE_CAPTCHA"] == "Y"): /* использовать CAPTCHA? */ ?> <div class="captcha"> <h3><?= GetMessage('MAIN_REGISTER_CAPTCHA_TITLE'); ?></h3> <input type="hidden" name="captcha_sid" value="<?= $arResult["CAPTCHA_CODE"]; ?>" /> <img src="/bitrix/tools/captcha.php?captcha_sid=<?= $arResult["CAPTCHA_CODE"]; ?>" width="180" height="40" alt="CAPTCHA" /> <span> <?= GetMessage('MAIN_REGISTER_CAPTCHA_HELP'); ?> <i>*</i> </span> <span> <input type="text" name="captcha_word" maxlength="50" value="" /> </span> </div> <?php endif; ?> <div class="submit"> <input type="submit" name="register_submit_button" value="<?= GetMessage('MAIN_REGISTER_FORM_SUBMIT'); /* кнопка отправки формы */ ?>" /> </div> </form> <p> <?= $arResult["GROUP_POLICY"]["PASSWORD_REQUIREMENTS"]; /* предупреждение о min длине пароля */?> </p> <p> <i>*</i> <?= GetMessage('MAIN_REGISTER_REQUIRED'); /* Эти поля обязательны для заполнения */ ?> </p> </div>
<?php /* * Файл local/templates/.default/components/bitrix/main.register/.default/lang/ru/template.php */ $MESS['MAIN_REGISTER_FORM_TITLE'] = 'Регистрация'; $MESS['MAIN_REGISTER_REG_AUTH'] = 'Вы зарегистрированы и успешно авторизованы.'; $MESS['MAIN_REGISTER_EMAIL_HELP'] = 'На указанный в форме e-mail придет запрос на подтверждение регистрации.'; $MESS['MAIN_REGISTER_LOGIN'] = 'Логин'; $MESS['MAIN_REGISTER_EMAIL'] = 'E-mail'; $MESS['MAIN_REGISTER_PASSWORD'] = 'Пароль'; $MESS['MAIN_REGISTER_CONFIRM_PASSWORD'] = 'Подтверждение пароля'; $MESS['MAIN_REGISTER_NAME'] = 'Имя'; $MESS['MAIN_REGISTER_SECOND_NAME'] = 'Отчество'; $MESS['MAIN_REGISTER_LAST_NAME'] = 'Фамилия'; $MESS['MAIN_REGISTER_TITLE'] = 'Обращение'; $MESS['MAIN_REGISTER_USER_UNKNOWN'] = 'Нет данных'; $MESS['MAIN_REGISTER_USER_MALE'] = 'Мужской'; $MESS['MAIN_REGISTER_USER_FEMALE'] = 'Женский'; $MESS['MAIN_REGISTER_PERSONAL_PROFESSION'] = 'Профессия'; $MESS['MAIN_REGISTER_PERSONAL_WWW'] = 'WWW-страница'; $MESS['MAIN_REGISTER_PERSONAL_ICQ'] = 'ICQ'; $MESS['MAIN_REGISTER_PERSONAL_GENDER'] = 'Пол'; $MESS['MAIN_REGISTER_PERSONAL_BIRTHDAY'] = 'Дата рождения'; $MESS['MAIN_REGISTER_PERSONAL_PHOTO'] = 'Фотография'; $MESS['MAIN_REGISTER_PERSONAL_PHONE'] = 'Телефон'; $MESS['MAIN_REGISTER_PERSONAL_FAX'] = 'Факс'; $MESS['MAIN_REGISTER_PERSONAL_MOBILE'] = 'Мобильный'; $MESS['MAIN_REGISTER_PERSONAL_PAGER'] = 'Пейджер'; $MESS['MAIN_REGISTER_PERSONAL_STREET'] = 'Улица, дом'; $MESS['MAIN_REGISTER_PERSONAL_MAILBOX'] = 'Почтовый ящик'; $MESS['MAIN_REGISTER_PERSONAL_CITY'] = 'Город'; $MESS['MAIN_REGISTER_PERSONAL_STATE'] = 'Область / край'; $MESS['MAIN_REGISTER_PERSONAL_ZIP'] = 'Почтовый индекс'; $MESS['MAIN_REGISTER_PERSONAL_COUNTRY'] = 'Страна'; $MESS['MAIN_REGISTER_PERSONAL_NOTES'] = 'Дополнительные заметки'; $MESS['MAIN_REGISTER_WORK_COMPANY'] = 'Наименование компании'; $MESS['MAIN_REGISTER_WORK_DEPARTMENT'] = 'Департамент / Отдел'; $MESS['MAIN_REGISTER_WORK_POSITION'] = 'Должность'; $MESS['MAIN_REGISTER_WORK_WWW'] = 'WWW-страница (работа)'; $MESS['MAIN_REGISTER_WORK_PHONE'] = 'Телефон (работа)'; $MESS['MAIN_REGISTER_WORK_FAX'] = 'Факс (работа)'; $MESS['MAIN_REGISTER_WORK_PAGER'] = 'Пейджер (работа)'; $MESS['MAIN_REGISTER_WORK_STREET'] = 'Улица, дом (работа)'; $MESS['MAIN_REGISTER_WORK_MAILBOX'] = 'Почтовый ящик (работа)'; $MESS['MAIN_REGISTER_WORK_CITY'] = 'Город (работа)'; $MESS['MAIN_REGISTER_WORK_STATE'] = 'Область / край (работа)'; $MESS['MAIN_REGISTER_WORK_ZIP'] = 'Почтовый индекс (работа)'; $MESS['MAIN_REGISTER_WORK_COUNTRY'] = 'Страна (работа)'; $MESS['MAIN_REGISTER_WORK_PROFILE'] = 'Направления деятельности'; $MESS['MAIN_REGISTER_WORK_LOGO'] = 'Логотип компании'; $MESS['MAIN_REGISTER_WORK_NOTES'] = 'Дополнительные заметки (работа)'; $MESS['MAIN_REGISTER_FORM_SUBMIT'] = 'Зарегистрироваться'; $MESS['MAIN_REGISTER_CAPTCHA_TITLE'] = 'Защита от автоматической регистрации'; $MESS['MAIN_REGISTER_CAPTCHA_HELP'] = 'Введите символы с картинки'; $MESS['MAIN_REGISTER_REQUIRED'] = 'Эти поля обязательны для заполнения';
<?php /* * Файл local/templates/.default/components/bitrix/main.register/.default/lang/ru/component.php */ $MESS['REGISTER_WRONG_CAPTCHA'] = 'Неверно введено слово с картинки'; $MESS['REGISTER_FIELD_REQUIRED'] = 'Поле #FIELD_NAME# обязательно для заполнения'; $MESS['REGISTER_DEFAULT_TITLE'] = 'Регистрация нового пользователя'; $MESS['REGISTER_USER_WITH_EMAIL_EXIST'] = 'Пользователь с таким e-mail (#EMAIL#) уже существует'; $MESS['main_register_sess_expired'] = 'Ваша сессия истекла, повторите попытку регистрации'; $MESS['main_register_decode_err'] = 'Ошибка при дешифровании пароля (#ERRCODE#)';
/*
* Файл local/templates/.default/components/bitrix/main.register/.default/style.css
*/
.bitrix-main-register {
}
.bitrix-main-register > p {
margin: 1em 0;
}
.bitrix-main-register > p > a {
text-decoration: underline;
}
.bitrix-main-register > form {
overflow: hidden;
}
.bitrix-main-register > form > div {
width: 50%;
margin-bottom: 15px;
float: left;
box-sizing: border-box;
}
.bitrix-main-register > form > div.captcha {
border: 1px solid #ccc;
padding: 20px 15px 15px 15px;
position: relative;
margin-top: 15px;
width: 49%;
clear: both;
}
.bitrix-main-register > form > div.captcha > h3 {
position: absolute;
top: -10px;
font-weight: normal;
font-size: 16px;
background: #eee;
padding: 0 10px;
color: #999;
}
.bitrix-main-register > form > div.captcha > span:first-of-type {
margin-top: 10px;
}
.bitrix-main-register > form > div:nth-of-type(even) {
padding-left: 1%;
}
.bitrix-main-register > form > div:nth-of-type(odd) {
padding-right: 1%;
}
.bitrix-main-register > form > div > span {
display: block;
}
.bitrix-main-register > form > div > span:first-child {
margin-bottom: 5px;
}
.bitrix-main-register > form > div > span > input[type="text"],
.bitrix-main-register > form > div > span > input[type="password"],
.bitrix-main-register > form > div > span > select,
.bitrix-main-register > form > div > span > textarea {
width: 100%;
padding: 5px;
border:1px solid #ccc;
}
.bitrix-main-register > form > div.submit {
float: none;
padding-left: 0;
}
.bitrix-main-register > form > div.submit > input[type="submit"] {
width: 30%;
padding: 5px;
background: #333;
color: #fff;
border: none;
margin-top: 10px;
}
.bitrix-main-register i {
font-style: normal;
font-weight: bold;
color: #f00;
}
И вот что получилось в итоге:
Тут есть еще один важный момент. Что будет, если на эту страницу попадает авторизованный пользователь? Ему показывается малоинформативное сообщение, что он зарегистрирован и авторизован.
<?php if ($USER->IsAuthorized()): /* если пользователь уже авторизован */ ?> <p><?= GetMessage('MAIN_REGISTER_REG_AUTH'); /* Вы зарегистрированы и авторизованы */ ?></p> <?php return ?> <?php endif; ?>
Есть смысл перенаправить его на страницу личного кабинета или на страницу профиля:
<?php if ($USER->IsAuthorized()): /* если пользователь уже авторизован, ему здесь делать нечего */ ?> <?php LocalRedirect('/auth/profile.php'); ?> <?php endif; ?>
Пользовательские поля
Хотя Битрикс предлагает большой набор предопределенных полей, их все-таки может не хватить. Тогда остается только создавать свои поля. Это можно сделать в панели управления: «Настройки • Настройки продукта • Пользовательские поля»:
Я добавил поле «Мое поле», тип «Строка», в настройках компонента указал, что это поле надо показывать:
Теперь форма регистрации имеет вид:
Порядок полей
Для настройки порядка следования полей в форме, создадим файл local/templates/.default/components/bitrix/main.register/.default/result_modifier.php
:
<?php /* * Файл local/templates/.default/components/bitrix/main.register/.default/result_modifier.php */ if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); // меняем порядок следования полей $arResult['SHOW_FIELDS'] = array( 'NAME', 'LAST_NAME', 'LOGIN', 'EMAIL', 'PASSWORD', 'CONFIRM_PASSWORD', 'WORK_COMPANY', 'WORK_PHONE', 'PERSONAL_PHONE', ); ?>
В результате чего форма примет вид:
Авторизация по E-mail
Давайте уберем поле LOGIN
, как отживший свое пережиток прошлого. Без этого поля регистрацию пользователь не пройдет, поэтому будем создавать LOGIN
из EMAIL
. Добавляем в init.php
следующий код:
AddEventHandler("main", "OnBeforeUserRegister", "OnBeforeUserUpdateHandler"); AddEventHandler("main", "OnBeforeUserUpdate", "OnBeforeUserUpdateHandler"); function OnBeforeUserUpdateHandler(&$arFields) { $arFields["LOGIN"] = $arFields["EMAIL"]; return $arFields; }
Чтобы форма регистрации не выдавала ошибок «Не заполнено обязательное поле логин», внесем изменение в шаблон компонента:
<?php if ($FIELD == 'LOGIN'): /* логин */ ?> <input type="text" name="REGISTER[<?= $FIELD; ?>]" value="<?= uniqid('user_'); ?>" /> <?php elseif ($FIELD == "PASSWORD"): /* пароль */ ?> <!-- код пропущен --> <?php elseif ($FIELD == "CONFIRM_PASSWORD"): /* подтверждение пароля */ ?> <!-- код пропущен --> <?php endif; ?>
Еще раз изменим порядок следования полей в форме и сделаем поле LOGIN
первым, чтобы можно было его скрыть, обратившись с помощью :first-of-type
:
<?php /* * Файл local/templates/.default/components/bitrix/main.register/.default/result_modifier.php */ if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); // меняем порядок следования полей $arResult['SHOW_FIELDS'] = array( 'LOGIN', 'NAME', 'LAST_NAME', 'EMAIL', 'PERSONAL_PHONE', 'PASSWORD', 'CONFIRM_PASSWORD', 'WORK_COMPANY', 'WORK_PHONE', ); ?>
Теперь скроем поле LOGIN
:
/*
* Файл local/templates/.default/components/bitrix/main.register/.default/style.css
*/
.bitrix-main-register {
}
/* код пропущен */
.bitrix-main-register > form > div:first-of-type {
display: none;
}
/* код пропущен */
.bitrix-main-register > form > div:nth-of-type(even) {
padding-right: 1%;
}
.bitrix-main-register > form > div:nth-of-type(odd) {
padding-left: 1%;
}
/* код пропущен */
Но есть еще одна проблема — у нас теперь две формы регистрации с разным составом полей:
- первая формируется системным компонентом
system.auth.registration
и доступна по адресу/auth/?register=yes
- вторая формируется компонентом
bitrix:main.register
и доступна по адресу/auth/register.php
Давайте это исправим. Удалим весь код из шаблона компонента system.auth.registration
, и поместим в него вызов компонента bitrix:main.register
из файла /auth/register.php
:
<?php /* * Файл local/templates/.default/components/bitrix/system.auth.registration/.default/template.php */ if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); $APPLICATION->IncludeComponent( "bitrix:main.register", ".default", array( "AUTH" => "N", "REQUIRED_FIELDS" => array( 0 => "EMAIL", 1 => "NAME", 2 => "LAST_NAME", 3 => "PERSONAL_PHONE", ), "SET_TITLE" => "Y", "SHOW_FIELDS" => array( 0 => "EMAIL", 1 => "NAME", 2 => "LAST_NAME", 3 => "PERSONAL_PHONE", 4 => "WORK_COMPANY", 5 => "WORK_PHONE", ), "SUCCESS_PAGE" => "/auth/", "USER_PROPERTY" => array( ), "USER_PROPERTY_NAME" => "", "USE_BACKURL" => "N", "COMPONENT_TEMPLATE" => ".default" ), false );
А файл /auth/register.php
просто удалим. Можно еще удалить лишний код из шаблона компонента bitrix:main.register
, который никогда не будет выполнен. Системный компонент system.auth.registration
вызывается где-то глубоко в недрах Битрикс только в том случае, если пользователь не авторизован. И еще одна проверка в шаблоне «Пользователь авторизован?» просто не нужна.
<?php /* * Файл local/templates/.default/components/bitrix/main.register/.default/template.php */ if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); ?> <!-- следующие три строчки можно удалить --> <?php if ($USER->IsAuthorized()): /* если пользователь уже авторизован, ему здесь делать нечего */ ?> <?php LocalRedirect('/auth/profile.php'); ?> <?php endif; ?>
Не забываем изменить другие системные компоненты:
<?php /* * Файл local/templates/.default/components/bitrix/system.auth.authorize/.default/lang/ru/template.php */ $MESS['SYS_AUTH_AUTHORIZE_TITLE'] = 'Авторизация'; // теперь e-mail используется как логин $MESS['SYS_AUTH_AUTHORIZE_LOGIN'] = 'E-mail'; $MESS['SYS_AUTH_AUTHORIZE_PASSWORD'] = 'Пароль'; $MESS['SYS_AUTH_AUTHORIZE_REMEMBER'] = 'Запомнить меня'; $MESS['SYS_AUTH_AUTHORIZE_CAPTCHA_TITLE'] = 'Защита от автоматической регистрации'; $MESS['SYS_AUTH_AUTHORIZE_CAPTCHA_TEXT'] = 'Введите символы с картинки'; $MESS['SYS_AUTH_AUTHORIZE_SUBMIT'] = 'Войти'; $MESS['SYS_AUTH_AUTHORIZE_REG_USER'] = 'Зарегистрироваться'; $MESS['SYS_AUTH_AUTHORIZE_FORGOT'] = 'Забыли пароль?';
<?php /* * Файл local/templates/.default/components/bitrix/system.auth.forgotpasswd/.default/lang/ru/template.php */ $MESS['SYS_AUTH_FORGOT_TITLE'] = 'Восстановление пароля'; // теперь восстановление пароля только по e-mail $MESS['SYS_AUTH_FORGOT_HELP'] = 'Введите Ваш E-mail: инструкция по смене пароля будет отправлена на этот почтовый адрес.'; $MESS['SYS_AUTH_FORGOT_LOGIN'] = 'Логин'; $MESS['SYS_AUTH_FORGOT_EMAIL'] = 'E-mail'; $MESS['SYS_AUTH_FORGOT_CAPTHA_TITLE'] = 'Защита от автоматической регистрации'; $MESS['SYS_AUTH_FORGOT_CAPTHA_TEXT'] = 'Введите символы с картинки'; $MESS['SYS_AUTH_FORGOT_SUBMIT'] = 'Отправить'; $MESS['SYS_AUTH_FORGOT_AUTH'] = 'Авторизация';
<?php /* * Файл local/templates/.default/components/bitrix/system.auth.forgotpasswd/.default/template.php */ if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); ?> <!-- логин больше не нужен, удаляем или комментируем код ниже --> <!-- <div> <span> <?= GetMessage('SYS_AUTH_FORGOT_LOGIN'); /* логин пользователя */ ?> </span> <span> <input type="text" name="USER_LOGIN" maxlength="50" value="<?= $arResult["LAST_LOGIN"]; ?>" /> </span> </div> -->
<?php /* * Файл local/templates/.default/components/bitrix/system.auth.changepasswd/.default/lang/ru/template.php */ $MESS['SYS_AUTH_CHANGE_TITLE'] = 'Смена пароля'; // теперь e-mail используется как логин $MESS['SYS_AUTH_CHANGE_LOGIN'] = 'E-mail'; $MESS['SYS_AUTH_CHANGE_CHECK'] = 'Контрольная строка'; $MESS['SYS_AUTH_CHANGE_PASSWORD'] = 'Новый пароль'; $MESS['SYS_AUTH_CHANGE_CONFIRM'] = 'Подтверждение пароля'; $MESS['SYS_AUTH_CHANGE_CAPTCHA_TITLE'] = 'Защита от автоматической регистрации'; $MESS['SYS_AUTH_CHANGE_CAPTCHA_TEXT'] = 'Введите символы с картинки'; $MESS['SYS_AUTH_CHANGE_SUBMIT'] = 'Изменить пароль'; $MESS['SYS_AUTH_CHANGE_AUTH'] = 'Авторизация'; $MESS['SYS_AUTH_CHANGE_REQUIRED'] = 'Эти поля обязательны для заполнения';
Есть еще один момент, о котором есть смысл упомянуть. Если при изменении пароля не заполнить поле «E-mail», появляется сообщение об ошибке «Логин должен быть не менее 3 символов». Где это изменить, я не нашел, видимо где-то в недрах ядра Битрикс. Поэтому небольшой хак:
<?php /* * Файл local/templates/.default/components/bitrix/system.auth.changepasswd/.default/template.php */ if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); ?> <div class="system-auth-changepasswd"> <h2><?= GetMessage('SYS_AUTH_CHANGE_TITLE'); /* заголовок формы */ ?></h2> <?php // небольшй хак, который убирает сообщение о длине логина if (isset($arParams['AUTH_RESULT']['TYPE']) && $arParams['AUTH_RESULT']['TYPE'] == 'ERROR' && false !== iconv_strpos($arParams['AUTH_RESULT']['MESSAGE'], 'Логин должен быть')) { $arParams['~AUTH_RESULT']['MESSAGE'] = 'Недопустимое значение поля «E-mail»'; } ?> <p><?php ShowMessage($arParams["~AUTH_RESULT"]); /* сообщение о результате смены пароля */ ?></p>
- Битрикс. Регистрация и авторизация. Часть 3 из 3
- Битрикс. Регистрация и авторизация. Часть 1 из 3
- Битрикс. Форма обратной связи
- Битрикс. Поиск на сайте
- Битрикс. Создание комплексного компонента. Часть 4 из 4
- Битрикс. Создание комплексного компонента. Часть 3 из 4
- Битрикс. Создание комплексного компонента. Часть 2 из 4
Поиск: CMS • Web-разработка • Авторизация • Битрикс • Компонент • Регистрация • Форма • Шаблон компонента