Задача: при регистрации нового пользователя и оформлении заказа нужно убрать поле Логин и использовать электронную почту вместо него. При этом без захламления init.php и без создания собсвенных компонентов.
Когда требуется настроить регистрацию на сайте, чтобы в качестве логина использовался адрес электронной почты пользователя, можно выполнить следующие действия без изменения самого компонента регистрации и без создания новых пространств имен.
Копирование значения поля EMAIL в поле LOGIN при помощи JavaScript
Для начала, скопируем значение поля EMAIL и вставим его в поле LOGIN при помощи JavaScript. Для этого нужно внести изменения в шаблон компонента "main.register".
Пример кода для шаблона компонента "main.register":
<? if ($FIELD == 'EMAIL') { ?>
<input class="form-control" size="30" type="email" name="REGISTER[<?= $FIELD ?>]"
onkeyup="document.getElementById('login-field').value = this.value"
value="<?= $arResult["VALUES"][$FIELD] ?>"/>
<? } elseif ($FIELD == 'LOGIN') { // Скрываем поле LOGIN ?>
<input id="login-field" size="30" type="hidden" name="REGISTER[<?= $FIELD ?>]"
value="<?= $arResult["VALUES"][$FIELD] ?>"/>
<? } else { ?>
<input class="form-control" size="30" type="text" name="REGISTER[<?= $FIELD ?>]"
value="<?= $arResult["VALUES"][$FIELD] ?>"/>
<? } ?>
В данном примере, при вводе значения в поле EMAIL, оно будет автоматически копироваться в поле LOGIN с помощью атрибута onkeyup="document.getElementById('login-field').value = this.value". Обратите внимание, что поле LOGIN имеет идентификатор login-field, который используется в JavaScript для получения доступа к полю и установки его значения.
Также прячем название самого поля "Логин", тамже в шаблоне "main.register". Этот код будет отображать название поля только для полей, которые не являются полем "LOGIN":
<? if ($FIELD !== 'LOGIN') { ?>
<label>
<?= GetMessage("REGISTER_FIELD_" . $FIELD) ?>:
<? if ($arResult["REQUIRED_FIELDS_FLAGS"][$FIELD] == "Y"): ?>
<span>*</span>
<? endif ?>
</label>
<? } ?>
Чтобы не путать пользователей, также необходимо изменить название поля "Логин" на "E-mail" в компонентах авторизации и восстановления пароля. Для этого необходимо найти соответствующие шаблоны system.auth.form и system.auth.forgotpasswd и заменить название поля "Логин" на "E-mail".
Создание логина из полного адреса электронной почты при оформлении заказа
При оформлении заказа, когда пользователь еще не зарегистрирован и делает первый заказ, автоматически происходит регистрация и создается логин на основе указанного адреса электронной почты. По умолчанию, логин будет содержать только часть адреса до символа "@".
Для создания логина из полного адреса электронной почты нужно внести изменения в файл confirm.php шаблона оформления заказа. Вставьте следующий код:
if (!empty($arResult["ORDER"])) {
$USER_UPD = new CUser;
$rsUser = CUser::GetByID($arResult["ORDER"]['USER_ID']);
$arUser = $rsUser->Fetch();
$fields = array(
"EMAIL" => $arUser['EMAIL'],
"LOGIN" => $arUser['EMAIL']
);
$USER_UPD->Update($arResult["ORDER"]['USER_ID'], $fields);
// Здесь вся остальная логика confirm.php
}
Этот код получает данные о пользователе, включая его адрес электронной почты, и обновляет логин пользователя, устанавливая его равным полному адресу электронной почты.
Пример использования в видеоуроке:
Авторизация, регистрация и восстановление пароля
После внесения всех этих изменений, регистрация и оформление заказа на сайте с использованием адреса электронной почты в качестве логина должны работать как ожидается, без необходимости создания собственных компонентов или изменения init.php.