+7 495 008 8452
  • Загрузка
Выберите ваш цвет
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Настраиваемая регистрация - доработка

На одном из проектов возникал необходимость собирать при регистрации дополнительную инфу (компания, телефон и т.д.).
Поставили компонент "Настраиваемая регистрация", настроили все как положено, по инструкции.
Проходит несколько дней и замечаем, что 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.

 

 

Источник: http://dev.1c-bitrix.ru/community/webdev/user/5535/blog/1541/

Назад в раздел

Подписаться на новые материалы раздела:
Загрузка...