Настраиваемая регистрация - доработка
На одном из проектов возникал необходимость собирать при регистрации дополнительную инфу (компания, телефон и т.д.).
Поставили компонент "Настраиваемая регистрация", настроили все как положено, по инструкции.
Проходит несколько дней и замечаем, что 70% юзеров регистрируются не указывая при этом дополнительной информации, при всем при том, что часть дополнительных полей являются обязательными для заполнения, и часть пользователей зарегистрированы по несколько раз под разными логинами и разными мылами. Начали отслеживать пути таких юзеров и выяснилось, что:
1. Если юзер со страниц Восстановления или Смены пароля перейдет по ссылке авторизация, то попадет он не на страницу с "Настраиваемой регистрацией", а на системную форму регистрации со стандартным набором полей и мы получим зарегистрированного пользователя без необходимых нам дополнительных данных.
2. Если в форме авторизации указать в качестве страницы регистрации файл с компонентом настраиваемой регистрации, то из формы авторизации ссылки на восстановление и смену пароля ведут на страницу с Настраиваемой регистрацией, где нет ни смены ни запроса пароля, в результате наши юзеры начинают регистрироваться второй, третий раз и т.д., а потом и вовсе звонить со словами: "Почему мы каждый раз должны регистрироваться на Вашем сайте, у нас скоро email-адреса кончатся" (на проекте включена проверка на уникальность мыл).
По разному перепробовали решить проблему, во всех случаях находилась ссылка на системную форму регистрации.
После кастомизации всех компонент (system.auth.forgotpasswd, system.auth.changepasswd, main.register и system.auth.form) проблема была решена. Но!!!
1. Клиент, которому обещается что он самостоятельно сможет воспользоваться любым компонентом этого не умеет!
2. Разработчик тратит в разы больше времени, чем ожидается сначала.
3. Выходит, что имеющийся компонент становится бесполезным, так как его + еще три компонента приходится кастомизировать.
Ниже привожу код страницы, решающий найденные проблемы. Этот код мы разместили в файле auth.php ("системный" файл в корне сайта из демонстрационного комплекта).
Обращаю внимание отдела разработки компании 1С-Битрикс - использовались только ДЕФОЛТНЫЕ компоненты!!! Используя приведенный ниже код можно доработать "Программируемую" регистрацию до действительно "Настраиваемой", и тогда не придется производить никаких лишних копирований и кастомизаций описанных в документации в качестве комментариев от Роберта Басырова.
Собственно сам код страницы готовый для вставки в auth.php:
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
if($_GET['forgot_password']=='yes'):
$APPLICATION->SetTitle("Запрос пароля на восстановление");
elseif($_GET['change_password']=='yes'):
$APPLICATION->SetTitle("Востановление пароля");
elseif($_GET['register']=='yes'):
$APPLICATION->SetTitle("Регистрация");
else:
$APPLICATION->SetTitle("Авторизация");
endif;
global $USER;
if ($USER->IsAuthorized())
{
if (isset($_REQUEST["backurl"]) && strlen($_REQUEST["backurl"])>0)
LocalRedirect($backurl);
}
?> <?global $USER;
if ($USER->IsAuthorized())
{?>
<p>Вы зарегистрированы и успешно авторизовались.</p>
<p><a href="<?=SITE_DIR?>" href="">Вернуться на главную страницу</a></p>
<?}?>
<?global $USER;
if (!$USER->IsAuthorized())
{?>
<?if($_GET['forgot_password']=='yes'):?>
<?$APPLICATION->IncludeComponent(
"bitrix:system.auth.forgotpasswd","",false
);?>
<?elseif($_GET['change_password']=='yes'):?>
<?$APPLICATION->IncludeComponent(
"bitrix:system.auth.changepasswd","",false
);?>
<?elseif($_GET['register']=='yes'):?>
<?$APPLICATION->IncludeComponent(
"bitrix:main.register",
"",
Array(
"USER_PROPERTY_NAME" => "",
"SEF_MODE" => "N",
"SHOW_FIELDS" => Array("NAME", "SECOND_NAME", "LAST_NAME", "PERSONAL_MOBILE", "PERSONAL_CITY", "WORK_COMPANY", "WORK_POSITION", "WORK_WWW", "WORK_PHONE", "WORK_FAX", "WORK_PROFILE", "WORK_LOGO"),
"REQUIRED_FIELDS" => Array("NAME", "SECOND_NAME", "LAST_NAME", "PERSONAL_MOBILE", "PERSONAL_CITY"),
"AUTH" => "Y",
"USE_BACKURL" => "Y",
"SUCCESS_PAGE" => "",
"SET_TITLE" => "Y",
"USER_PROPERTY" => Array("UF_AGENT")
)
);?>
<?else:?>
<?$APPLICATION->IncludeComponent(
"bitrix:system.auth.form",
"",
Array(
"REGISTER_URL" => SITE_DIR."auth.php",
"PROFILE_URL" => SITE_DIR."club/",
"SHOW_ERRORS" => "Y"
)
);?>
<?endif?> <?}?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?> |
ЗЫ: Надеюсь настанет день, когда это будет доделано, и к доработкам перетаскиваемым из проекта в проект не придется добавлять еще и эту элементарщину, которую, если по хорошему, надо делать комплексным компонентом с поддержкой Ajax.
Назад в раздел