Регистрация пользователя в определенную группу сайта на Битрикс

Достаточно часто требуется регистрировать пользователя в определенную группу, в зависимости от того какую форму регистрации прошел пользователь. Это достаточно легко проделать с помощью события OnAfterUserAddHandler.

Итак, пример реализации данного функционала на конкретном сайте:
Имеем сайт медицинского центра, на котором могут регистрироваться как врачи, для добавления себя в базу врачей России, так и обычные пользователи, которые регистрируются для просмотра и использования форума на сайте.

С простыми пользователями все понятно и стандартно, регистрируются прямо на форуме и автоматически попадают в группу "Зарегистрированные пользователи"

С врачами чуть сложнее:
Для начала создаем для них группу: "Врачи эндокринологи"

В итоге получаем группу с ID15 (в моем случае, у вас будет другой ID)

Затем создаем новое пользовательское свойство с настройками как на cкрине. Далее, благодаря этому полю, будем заносить пользователя в нужную группу

Самое важное здесь- это выставить значение по умолчанию, абсолютно любое, главное не пустое. так же не плохо сделать обязательным (на скрине я этот момент упустил)

Выводим стандартную форму регистрации:

Далее, создаем на сайте новый раздел или страницу, на которой будут регистрироваться врачи. например /docsauth/ и вытаскиваем на нее компонент "Настраиваемая регистрация" который лежит в папке Служебные - User - Настраиваемая регистрация

Переходим к ее настройкам и выставляем все как угодно, как того требует специфика вашего сайта, но самое главное: выбираем наше пользовательское поле, в моем случае UF_BAZA

Сохраняемся. Осталось только навесить обработчик, благодаря которому система будет знать, что пользователь зарегистрировавшийся именно через эту форму, будет автоматом добавляться в группу с ID-15

Для этого открываем файл /корень-сайта/bitrix/php_intarface/init.php если его нет, то просто создаете вручную. И в него добавляем следующее:

<?
AddEventHandler("main", "OnAfterUserAdd", "OnAfterUserAddHandler");
function OnAfterUserAddHandler(&$arFields)
{
if($arFields["ID"] > 0)
{
if(strlen($arFields["UF_BAZA"]) > 0)  //Если поле UF_BAZA заполнено
{
$arGroups = CUser::GetUserGroup($arFields["ID"]);
$arGroups[] = 15; //То добаляем пользователя в группу c ID15
CUser::SetUserGroup($arFields["ID"], $arGroups);
}
else
{
$arGroups = CUser::GetUserGroup($arFields["ID"]);
$arGroups[] = 5; //Иначе в группу c ID5
CUser::SetUserGroup($arFields["ID"], $arGroups);
}
}
}
?>

В общем-то все, можно проверять в деле.

Регистрация в зависимости от сайта при многосайтовой конфигурации

Все тоже самое можно проделать, если нужно регистрировать пользователя в определенную группу, в зависимости от сайта на котором он эту процедуру прошел. При этом пользовательские поля создавать не нужно, достаточно знать ID-сайта и в init.php вписать следующее:

<?
AddEventHandler("main", "OnBeforeUserRegister", "OnBeforeUserRegisterHandler");
// создаем обработчик события "OnBeforeUserRegister"
function OnBeforeUserRegisterHandler(&$arFields)
{
// если пользователь регистрируется на сайте s1
if(SITE_ID=="s1")
{
// добавляем его в группу с id=5
$arFields["GROUP_ID"][] = 5;
}
elseif(SITE_ID=="s2")
{
// добавляем его в группу с id=6
$arFields["GROUP_ID"][] = 6;
}
}
?>

Все заметки
Уважаемый читатель! В связи с участившимся спамом в комментариях, возможность писать доступна только для зарегистрированных пользователей

Зарегистрироваться Войти
Напомнить пароль

Быстрая регистрация через соц.сеть:
Максим
добрый день.
а как сделать чтобы выбор группы зависел от выбора ее из списка?
пробовал так:
Код
<? 
AddEventHandler("main", "OnAfterUserAdd", "OnAfterUserAddHandler"); 
function OnAfterUserAddHandler(&$arFields) 
   { 
   if($arFields["ID"] > 0) 
      { 
      if(strlen($arFields["UF_BAZA"]) == 4)  
         { 
         $arGroups = CUser::GetUserGroup($arFields["ID"]); 
         $arGroups[] = 12; //То добаляем пользователя в группу c ID12 
         CUser::SetUserGroup($arFields["ID"], $arGroups); 
         } 
         elseif (strlen($arFields["UF_REG"]) == 5)
         {
         $arGroups = CUser::GetUserGroup($arFields["ID"]); 
         $arGroups[] = 13; //То добаляем пользователя в группу c ID13 
         CUser::SetUserGroup($arFields["ID"], $arGroups);
         }
         elseif (strlen($arFields["UF_REG"]) == 6)
         {
         $arGroups = CUser::GetUserGroup($arFields["ID"]); 
         $arGroups[] = 14; 
         CUser::SetUserGroup($arFields["ID"], $arGroups);
         }
      else
         { 
         $arGroups = CUser::GetUserGroup($arFields["ID"]); 
         $arGroups[] = 8; //Иначе в группу c ID8 
         CUser::SetUserGroup($arFields["ID"], $arGroups); 
         } 
      } 
   } 
?> 
 
не силен в программировании, поэтому не удивлюсь если в корне не правильно написал.
Но есть один момент. Ваш код при вставке его в файл init.php делает так, что перестает отображаться капча и нельзя сделать полное тестирование системы (может и еще что ...) Зато если вставлять вариант при многосайтовости, то такой проблемы не возникает.
помогите пожалуйста решить эти проблемы.
Случайные заметки из блога
Изменить размер картинок на лету в битрикс

Встала задачка: на собственном сайте, уменьшить размер превьюшек...

Фиксированная корзина с обновлением, без перезагрузки страницы.

Иногда нужно сделать так, чтобы корзина в интернет магазине,...

Простой WEB сервер на ubuntu, для Битрикс

Расскажу как по быстрому сконфигурировать WEB сервер для работы...

Вывести минимальную цену торговых предложений в Битрикс

Если у товара несколько торговых предложений и у каждого предложения...

Отсортировать элементы в Битрикс по свойству привязка к разделам

При создании достаточно сложных интернет-магазинов на Битрикс,...

Малая корзина Битрикс, упрощенный шаблон

Шаблон малой корзины битрикс, который можно вывести в боковом...

Свежие комментарии в блоге
Вывести новости из конкретного раздела инфоблока Битрикс

[CODE] Выводить новости определенного раздела, но компонентом bitrix:news так. В компоненте bitri...

23.06.2017 / Кирилл
Пункты меню из разделов инфоблока Битрикс

Михаил спасибо за ваши уроки, все понятно и доступно. Подскажите пожалуйста (а лучше приведите приме...

20.06.2017 / Константин Логинов
Время на БД и веб сервере отличается на 3600 секунд, тест Битрикс

[url=/blog-note/2040/]Время на БД и веб сервере отличается на 3600 секунд, тест Битрикс[/url] До...

19.06.2017 / Михаил Базаров
Две готовые виртуальные машины для веб-разработки

Добрый день! Не работают ссылки на архивы облака mail.ru. Вы можете перезалить архивы?

12.06.2017 / Илья Белявцев

© 2011—2017 Частный вебмастер: ИП Базаров, ОГРНИП: 315784700173692. Работает на 1С-Битрикс.

Копирование материалов запрещено: "ГК РФ, часть 4, раздел VII: Права на результаты интеллектуальной деятельности".

Информация размещенная на сайте, не является публичной офертой. Политика конфеденциальности

x
Как к Вам обращаться? *
Ваша электронная почта: *
Доп. материалы (логотип, тех. задание):
 
Обзор
Текст сообщения:

Нажимая на кнопку "Отправить", Вы соглашаетесь на обработку Ваших персональных данных согласно политике конфеденциальности. Ознакомиться с которой, можно в нижнем правом углу сайта