Добро пожаловать на сайт Bitrix Q&A, где вы можете задавать вопросы о программировании и разработке на Битрикс и получать быстрые и квалифицированные ответы от профессионалов!




Собственная форма авторизации/регистрации везде (включая переход по ссылкам из настройки профайла)

0 голосов
Всем привет. Знаю, что тема заезжена, просто огромное количество постов и предлагаются разные по сложности решения.

Я только хотел уточнить, все ли я верно понял и подвести итог.

Суть проблемы заключается в том, что если используется компонент bitrix:main.profile и пользователь попал на страницу не будучи авторизованным, то ссылки на регистрацию и авторизацию, которые ему предложат, будут выводить авторизацию и регистрацию по системным шаблонам, т.е. обязательные при регистрации поля не будут заполнены.

Решение делится на 2 части:

1. Копируем шаблон (папка .default) из /bitrix/components/bitrix/system.auth.registration/templates в
/bitrix/templates/.default/components/bitrix/system.auth.registration/

И модифицируем код шаблона - он теперь будет содержать код, вызывающий именно наш нужный для этого нелегкого дела компонент (а так же поправляем в самом конце url ссылки):
Код
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

ShowMessage($arParams["~AUTH_RESULT"]);


$APPLICATION->IncludeComponent("bitrix:main.register", "reg_1", array(
   "SHOW_FIELDS" => array(
      0 => "NAME",
      1 => "SECOND_NAME",
      2 => "PERSONAL_PROFESSION",
      3 => "PERSONAL_PHOTO",
      4 => "PERSONAL_PHONE",
      5 => "PERSONAL_CITY",
      6 => "PERSONAL_STATE",
   ),
   "REQUIRED_FIELDS" => array(
      0 => "NAME",
      1 => "SECOND_NAME",
      2 => "PERSONAL_PHONE",
   ),
   "AUTH" => "Y",
   "USE_BACKURL" => "Y",
   "SUCCESS_PAGE" => "/auth/personal.php?reg_ok",
   "SET_TITLE" => "Y",
   "USER_PROPERTY" => array(
   ),
   "USER_PROPERTY_NAME" => ""
   ),
   false
);

?>


<p>
<a href="/auth/" rel="nofollow"><b><?=GetMessage("AUTH_AUTH")?></b></a>
</p> 


2. Аналогичным образом изменяем форму регистрации:

Из /bitrix/components/bitrix/system.auth.authorize/templates папка .default качует в /bitrix/templates/.default/components/bitrix/system.auth.authorize/

В ней также вызывается наш компонент, заточенный под наши нужды:

Код
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
?>

<?
ShowMessage($arParams["~AUTH_RESULT"]);
ShowMessage($arResult['ERROR_MESSAGE']);


$APPLICATION->IncludeComponent("bitrix:system.auth.form", "aut_deftempl", array(
   "REGISTER_URL" => "/auth/register.php",
   "FORGOT_PASSWORD_URL" => "/auth/profile.php",
   "PROFILE_URL" => "/auth/profile.php",
   "SHOW_ERRORS" => "Y"
   ),
   false
);

?>


Теперь страницы с define("NEED_AUTH", true); выводят именно нашу форму регистрации и авторизации.

Нет ли в решении подводных камней или неучтенных моментов? Или решение верное?
Просто приведенные решения в некоторых постах на форуме пугают :)
спросил 19 Июль, 13 от PaDoNoK (180 баллов)

3 Ответы

0 голосов
можно еще немного попроще, системой вызывается system.auth.authorize с шаблоном .default (файл template.php)следовательно, достаточно изменить этот template.php, предварительно сохранив копию для отката, на всякий случай


итак, в папке /bitrix/components/bitrix/system.auth.authorize/templates/.default
  1. сделать копию скрипта template.php, под именем, например, template_back.php
  2. отредактировать template.php как душе угодно
Все.
Не за что. :)
ответил 19 Июль, 13 от IngriT (340 баллов)
0 голосов
Цитата
denis_orlov пишет:
сделать копию скрипта template.php, под именем, например, template_back.php
отредактировать template.php как душе угодно
И при первом же обновлении продукта изменения затрутся. Зачем давать вредные советы?
ответил 10 Сен, 13 от Pomnep (13,960 баллов)
0 голосов
Согласен.Исправляюсь. Общий алгоритм:

в папке

\bitrix\templates\.default\components\bitrix
  1.  создаем раздел с именем папки компонента, который требуется изменить, в данном случае system.auth.authorize  или  system.auth.registration (точные имена смотрим в родной папке \bitrix\components\bitrix)
  2.  из родной же папки в созданный раздел копируем папку .default нужного компонента со всем содержимым
  3.  файл template.php новой папки .default кастомизируем, как хотим


Все,
теперь система будет обращаться к этому шаблону, а не к системному

Порядок обхода шаблонов:
http://dev.1c-bitrix.ru/api_help/main/general/component20/14.search.php
ответил 08 Дек, 13 от IngriT (340 баллов)
Замена шаблона system.auth.form.default

Похожие вопросы

0 голосов
2 ответов
0 голосов
5 ответов
0 голосов
1 ответ
спросил 02 Авг, 13 от Repher (140 баллов)
0 голосов
3 ответов
спросил 21 Март, 14 от Patek (320 баллов)