Настраиваемая регистрация - main.register
Возможности системного компонента регистрации довольно скромные: нет возможности добавить свои поля, сделать их обязательными для заполнения. Для реализации таких возможностей есть компонент «Настраиваемая регистрация», который позволяет настроить и разместить на сайте свою форму регистрации. В визуальном редакторе компонент расположен по пути: Служебные -> Пользователь -> Настраиваемая регистрация
.
В настройках главного модуля должна стоять галка "Позволять регистрироваться самостоятельно" и выбрана группа для регистрации!
Пример вызова компонента:
<?
// Настраиваемая регистрация
$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
содержит следующий код:
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Регистрация");
?>
<?
$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"
)
);
?>
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>
Теперь нам надо кастомизировать форму регистрации под наш дизайн. Для этого копируем шаблон компонента:
- Откуда:
bitrix/components/bitrix/main.register/templates/.default
- Куда:
local/templates/название_сайта/components/bitrix/main.register/.default
После внесения изменений получилось так:
<?
/*
* Файл local/templates/название_сайта/components/bitrix/main.register/.default/template.php
*/
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
?>
<? if ($USER->IsAuthorized()): /* если пользователь уже авторизован */ ?>
<p><?= GetMessage('MAIN_REGISTER_REG_AUTH'); /* Вы зарегистрированы и авторизованы */ ?></p>
<? return ?>
<? endif; ?>
<div class="bitrix-main-register">
<h2><?= GetMessage('MAIN_REGISTER_FORM_TITLE'); /* заголовок формы */ ?></h2>
<? if (count($arResult["ERRORS"]) > 0): /* сообщения об ошибках при заполнении формы */ ?>
<?
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"]));
?>
<? elseif ($arResult["USE_EMAIL_CONFIRMATION"] === "Y"): ?>
<p><?= GetMessage('MAIN_REGISTER_EMAIL_HELP'); /* будет отправлено письмо для подтверждения */ ?></p>
<? endif; ?>
<form method="post" action="<?= POST_FORM_ACTION_URI; ?>" name="regform" enctype="multipart/form-data">
<? if ($arResult["BACKURL"] <> ''): ?>
<input type="hidden" name="backurl" value="<?= $arResult["BACKURL"]; ?>" />
<? endif; ?>
<? foreach ($arResult["SHOW_FIELDS"] as $FIELD): ?>
<? if ($FIELD == "AUTO_TIME_ZONE" && $arResult["TIME_ZONE_ENABLED"]): /* часовой пояс */ ?>
<!-- код удален -->
<? continue; ?>
<? endif; ?>
<div>
<span>
<?= GetMessage('MAIN_REGISTER_'.$FIELD); /* очередное поле */ ?>
<? if ($arResult["REQUIRED_FIELDS_FLAGS"][$FIELD] == "Y"): ?>
<i>*</i> <!-- поле обязательно для заполнения -->
<? endif; ?>
</span>
<span>
<? if ($FIELD == "PASSWORD"): /* пароль */ ?>
<input type="password" name="REGISTER[<?= $FIELD; ?>]" value="<?= $arResult["VALUES"][$FIELD]; ?>" autocomplete="off" />
<? if ($arResult["SECURE_AUTH"]): /* безопасная авторизация */ ?>
<!-- код удален -->
<? endif; ?>
<? elseif ($FIELD == "CONFIRM_PASSWORD"): /* подтверждение пароля */ ?>
<input type="password" name="REGISTER[<?= $FIELD; ?>]" value="<?= $arResult["VALUES"][$FIELD]; ?>" autocomplete="off" />
<? 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>
<? elseif (in_array($FIELD, array("PERSONAL_COUNTRY", "WORK_COUNTRY"))): /* страна проживания или работы */ ?>
<select name="REGISTER[<?= $FIELD; ?>]">
<? foreach ($arResult["COUNTRIES"]["reference_id"] as $key => $value): ?>
<?
$selected = ($value == $arResult["VALUES"][$FIELD]) ? ' selected="selected"' : '';
?>
<option value="<?= $value; ?>"<?= $selected; ?>>
<?= $arResult["COUNTRIES"]["reference"][$key]; ?>
</option>
<? endforeach; ?>
</select>
<? elseif (in_array($FIELD, array("PERSONAL_PHOTO", "WORK_LOGO"))): /* личное фото */ ?>
<input type="file" name="REGISTER_FILES_<?= $FIELD; ?>" />
<? elseif (in_array($FIELD, array("PERSONAL_NOTES", "WORK_NOTES"))): ?>
<textarea name="REGISTER[<?= $FIELD; ?>]">
<?= $arResult["VALUES"][$FIELD]; ?>
</textarea>
<? elseif ($FIELD == "PERSONAL_BIRTHDAY"): /* дата рождения */ ?>
<small><?= $arResult["DATE_FORMAT"]; ?></small><br />
<input size="30" type="text" name="REGISTER[<?= $FIELD; ?>]" value="<?= $arResult["VALUES"][$FIELD]; ?>" />
<?
$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")
);
?>
<? else: ?>
<input type="text" name="REGISTER[<?= $FIELD; ?>]" value="<?= $arResult["VALUES"][$FIELD]; ?>" />
<? endif; ?>
</span>
</div>
<? endforeach; ?>
<? /***** User properties *****/ ?>
<? if($arResult["USER_PROPERTIES"]["SHOW"] == "Y"): ?>
<h3><?= empty($arParams["USER_PROPERTY_NAME"]) ? GetMessage("USER_TYPE_EDIT_TAB") : $arParams["USER_PROPERTY_NAME"]; ?></h3>
<? foreach ($arResult["USER_PROPERTIES"]["DATA"] as $FIELD_NAME => $arUserField): ?>
<div>
<span>
<?= $arUserField["EDIT_FORM_LABEL"]; ?>
<? if ($arUserField["MANDATORY"]=="Y"): ?>
<i>*</i> <!-- поле обязательно для заполнения -->
<? endif; ?>
</span>
<span>
<?
$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>
<? endforeach; ?>
<? endif; ?>
<? /***** User properties *****/ ?>
<? 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>
<? 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>
<?
/*
* Файл local/templates/название_сайта/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'] = 'Эти поля обязательны для заполнения';
<?
/*
* Файл local/templates/название_сайта/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/название_сайта/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;
}
Тут есть еще один важный момент. Что будет, если на эту страницу попадает авторизованный пользователь? Ему показывается малоинформативное сообщение, что он зарегистрирован и авторизован:
<? if ($USER->IsAuthorized()): /* если пользователь уже авторизован */ ?>
<p><?= GetMessage('MAIN_REGISTER_REG_AUTH'); /* Вы зарегистрированы и авторизованы */ ?></p>
<? return ?>
<? endif; ?>
Есть смысл перенаправить его на страницу личного кабинета или на страницу профиля:
<? if ($USER->IsAuthorized()): /* если пользователь уже авторизован, ему здесь делать нечего */ ?>
<? LocalRedirect('/auth/profile.php'); ?>
<? endif; ?>
Пользовательские поля
Хотя Битрикс предлагает большой набор предопределенных полей, их все-таки может не хватить. Тогда остается только создавать свои поля. Это можно сделать в панели управления: Настройки -> Настройки продукта -> Пользовательские поля
:
Я добавил тестовое поле Мое поле
, тип Строка
, в настройках компонента указал, что это поле надо показывать:
Порядок полей
Для настройки порядка следования полей в форме, создадим файл result_modifier.php
:
<?php
/*
* Файл local/templates/название_сайта/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;
}
Чтобы форма регистрации не выдавала ошибок «Не заполнено обязательное поле логин», внесем изменение в шаблон компонента:
<? if ($FIELD == 'LOGIN'): /* логин */ ?>
<input type="text" name="REGISTER[<?= $FIELD; ?>]" value="<?= uniqid('user_'); ?>" />
<? elseif ($FIELD == "PASSWORD"): /* пароль */ ?>
<!-- код пропущен -->
<? elseif ($FIELD == "CONFIRM_PASSWORD"): /* подтверждение пароля */ ?>
<!-- код пропущен -->
<? endif; ?>
Еще раз изменим порядок следования полей в форме и сделаем поле LOGIN
первым, чтобы можно было его скрыть, обратившись с помощью :first-of-type
:
<?
/*
* Файл local/templates/название_сайта/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/название_сайта/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
:
<?
/*
* Файл local/templates/название_сайта/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
вызывается где-то глубоко в недрах Битрикс только в том случае, если пользователь не авторизован. И еще одна проверка в шаблоне «Пользователь авторизован?» просто не нужна.
<?
/*
* Файл local/templates/название_сайта/components/bitrix/main.register/.default/template.php
*/
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
?>
<!-- следующие три строчки можно удалить -->
<? if ($USER->IsAuthorized()): /* если пользователь уже авторизован, ему здесь делать нечего */ ?>
<? LocalRedirect('/auth/profile.php'); ?>
<? endif; ?>
Не забываем изменить другие системные компоненты:
<?
/*
* Файл local/templates/название_сайта/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'] = 'Забыли пароль?';
<?
/*
* Файл local/templates/название_сайта/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'] = 'Авторизация';
<?
/*
* Файл local/templates/название_сайта/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>
-->
<?
/*
* Файл local/templates/название_сайта/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 символов". Где это изменить, я не нашел, видимо где-то в недрах ядра Битрикс. Поэтому небольшой хак:
<?
/*
* Файл local/templates/название_сайта/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>
<?
// небольшй хак, который убирает сообщение о длине логина
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><? ShowMessage($arParams["~AUTH_RESULT"]); /* сообщение о результате смены пароля */ ?></p>