Здравствуйте. После недавних обновлений битрикса стали звонить клиенты и жаловаться, что не могут оформить заказ. У нас сделано так, что вся регистрация происходит автоматически, эмейл на уникальность не проверяется, письма о регистрации не приходят и на один адрес можно оформлять заказы повторно. Это сделано для того, чтобы не мучать людей ЛК и Асей регистрацией. Просо зашли люди и оформили заказ. Все работает стандартными методами битрикса. Сейчас же, уже несколько звонков, что на этапе последнего оформления заказа, то есть подтверждения уже возникает ошибка: Ошибка регистрации нового пользователя: пользователь с номером телефона…. уже существует. Что делать? Настройки не менялись, все как и было. Но видимо, мосле обновлений битрикса он стал проверять номер телефона на уникальность и говорить, что такой уже есть. В главном модуле да, появились две новый галки (у нас не активны), что использовать номер телефона и телефон является обязательным. Но про уникальность ничего. Как отключить эту новою функцию битрикса? Кто что посоветует? |
|
http://joxi.ru/D2PyBMGIqad6BA
проверьте настройки главного модуля , может стоит галочка на регистрацию пользователя по номеру телефона , |
|
Путем изучения sale.order.ajax выяснилось, что в этой проблеме помогли настройки — в главном модуле установить http://prntscr.com/oald3x (если на вашем сайте это допустимо) и в настройках sale.order.ajax «ALLOW_APPEND_ORDER» => ‘Y’ GYRYs , если нашли другое решение, поделитесь, пожалуйста |
|
В том то и дело, что там ничего не стоит. Написал в поддержку, они сняли галочку в настройках магазина в списке свойств заказа в телефоне «является как телефон». И вроде как, обсудят с разработчиками что делать. |
|
Изучил что не так.
«Добавлена возможность регистрации покупателей по номеру телефона в компоненте sale.order.ajax.» Проблема даже не в компоненте , а в том как регистрируется пользователь и что при этом происходит с полем указанным как телефон. самый простой способ это отключить галочку в свойствах заказа «это поле является телефоном» еще можно на событие до регистрации пользователя удалять данные по номеру телефона что бы обойти проверки. |
||||
Ждём решения от разработчиков |
|
Пользователь 1242451 Заглянувший Сообщений: 13 |
#7 0 09.07.2019 12:06:24
Поддерживаю. Вопрос теперь когда ждать обновления с доработкой по данному функционалу. |
||
Тоже столкнулся в данной проблемой, опять прилетело кривое обновление. Весной тоже пришло уведолмение что выкатили обновления и теперь для умного фильтра (catalog.smart.filter) работает предфильтрация …. сегодня проверил, ага, хрен там был, нихрена как не работало так и не работает. |
|
Пользователь 252363 Заглянувший Сообщений: 10 |
#9 1 10.07.2019 13:56:46 В файле class.php который находится в /bitrix/components/bitrix/sale.order.ajax есть функция она где то на 1700 rкакой то строке
меняем на предпоследнюю версию компонента где не было проблем с регистрацией пользователя с телефоном и его повторной авторизацией
и проблема решена |
||||
Пользователь 306532 Постоянный посетитель Сообщений: 99 |
#10 0 11.07.2019 11:28:01 dpechurkin, В любом случае, хорошо чтобы они сами исправили и не надо было дорабатывать самостоятельно. |
Не удается создать нового пользователя с использованием ранее зарегистрированного электронного ящика
ID статьи: 241
, создана 22 июн 2017
При регистрации нового профиля на существующий электронный адрес во время оформлении заказа вылетает сообщение: «Ошибка регистрации нового пользователя: Email %адрес электронной почты% уже используется».
Решение
Активируйте проверку электронных адресов при регистрации на уникальность.
Настройку можно найти в административной части сайта: Настройки → Настройки продукта → Настройки модулей → Главный модуль, вкладка «Авторизация», группа настроек «Регистрация новых пользователей».
После сохранения изменений на странице оформления заказа станет возможным создание новых профилей, прикрепленных к одному и тому же электронному адресу.
Пример регистрации на один email:
Результат в личном кабинете:
Возможности системного компонента регистрации довольно скромные: нет возможности добавить свои поля, сделать их обязательными для заполнения. Для реализации таких возможностей есть компонент «Настраиваемая регистрация», который позволяет настроить и разместить на сайте свою форму регистрации. В визуальном редакторе компонент расположен по пути: «Служебные • Пользователь • Настраиваемая регистрация».
Пример вызова компонента
<?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>
Поиск:
CMS • Web-разработка • Авторизация • Битрикс • Компонент • Регистрация • Форма • Шаблон компонента
партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
При создании быстрого заказа (заказ в 1клик) неавторизованным пользователем первый раз для конкретного емейла — все проходит успешно. PS Сайт на Битронике |
|
Андрей, да, он создает пользователя, без него он жить не может, к сожалению) В настройках главного модуля есть галочка «Проверять E-mail на уникальность при регистрации». |
|
Может быть тогда высылать сразу на емейл при первом же заказе сгенерированный пароль для доступа к сайту? Глядишь в следующий раз зайдет уже авторизованным |
|
Сергей Эстрин Администратор Сообщений: 512 |
#4 28.03.2015 02:08:39
Конкретно пароль стандартными средствами не отправить, т.к. он хранится в зашифрованном виде в битриксе, но можно с помощью стандартных средств отправлять сообщение со ссылкой на страницу смены пароля, т.е. с помощью стандартных шаблонов сообщений. |
||
Цитировать Имя |
Гость Гость |
#5 10.03.2016 16:33:13
Не вариант, так как все решают поведенческие факторы и мы многое теряем. Думаю, при таком вариант авторизованным никто не зайдет, скорее развернется и уйдет. |
||
Цитировать Имя |
|||
В шаблоне компонента bitrix:sale.order.ajax при оформлении заказа от лица не зарегистрированного пользователя вылазит сообщение: «Не указан Email для регистрации пользователя» и поля e-mail нет, совсем нет — то есть записать почту некуда.
Как то нажатием галочек это можно исправить?
-
Вопрос заданболее года назад
-
363 просмотра
Вам нужно добавить обязательное свойство заказа Email (магазин -> настройки магазина -> свойства заказа) и поставьте галочку у опции «Использовать как E-Mail». Это нужно даже если вы указали что можно оформлять заказ без регистрации, так как создается каждый раз служебный пользователь для привязки заказа.
Так же в настройках главного модуля, на вкладке авторизации должно быть отключено подтверждение регистрации по email
Пригласить эксперта
-
Показать ещё
Загружается…
22 июн. 2023, в 13:47
2000 руб./за проект
22 июн. 2023, в 13:40
2500 руб./за проект
22 июн. 2023, в 13:18
30000 руб./за проект