Меню

E-mail вместо логина при регистрации и оформлении заказа в 1C-Битрикс

Просмотров: 3371

Задача: при регистрации нового пользователя и оформлении заказа нужно убрать поле Логин и использовать электронную почту вместо него. При этом без захламления init.php и без создания собсвенных компонентов.

E-mail вместо логина при регистрации и оформлении заказа в 1C-Битрикс

Когда требуется настроить регистрацию на сайте, чтобы в качестве логина использовался адрес электронной почты пользователя, можно выполнить следующие действия без изменения самого компонента регистрации и без создания новых пространств имен.

Копирование значения поля 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.

Михаил Базаров 29.06.2023
На D7, обновление логина на email в confirm.php
Код
use Bitrix\Main\UserTable;

if (!empty($arResult["ORDER"])) {
    $userId = $arResult["ORDER"]['USER_ID'];
    $userFields = UserTable::getList([
        'filter' => ['ID' => $userId],
        'select' => ['EMAIL']
    ])->fetch();

    $user = new \CUser;
    $user->Update($userId, [
        'EMAIL' => $userFields['EMAIL'],
        'LOGIN' => $userFields['EMAIL']
    ]);
}
Гость 03.12.2023
Не хочу показаться занудой, но слово ЗАХЛАМЛЕНИЕ пишется через а.
Михаил Базаров 03.12.2023
Спасибо! Поправлено
Александр 15.05.2024
Точно знаю что в коробе Б24+интернет магазин достачно просто отметить галкой регистрацию по email, сделать её обязательной и проводить проверку на уникальность и email будет автоматически подставляться вместо логина, даже если вы ввели логин не похожий на почту.
Возможно, подобная ситуация и в БУСе последних версий
Михаил Базаров 16.05.2024
Да, в Б-24 так оно и работает. В БУС, пока, все по старому.
Плюс, если хочется что бы пользователи могли оформлять заказ без предварительной регистрации, этот способ не подойдет.
Так как, если включено подтверждение почты, оформление заказа не откроется пока пользователь не зарегистрируется.

Стоимость и сроки разработки сайтов и приложений

Окончательная стоимость и сроки разработки сайта формируются после обсуждения деталей на этапе заказа. Как правило, они редко выходят за обозначенные ниже рамки.

Интернет магазин: разработка с нуля от 400 000 руб.
от 5-ти недель

Cоздание интернет-магазина на 1С-Битрикс. Разработка с нуля, оптимизация кода под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Интернет-магазин на готовом решении от 100 000 руб.
от 7-ми дней

Готовое решение — вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Запускается на одном из 200-та (на ваш выбор) готовых решений.

Мобильное приложение от 400 000 руб.
от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Опросник на разработку. После ознакомления, задам уточняющие вопросы и оценю проект по стоимости и срокам разработки.