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

Просмотров: 26451

Достаточно часто требуется регистрировать пользователя в определенную группу, в зависимости от того какую форму регистрации прошел пользователь. Это достаточно легко проделать с помощью события 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; 
     } 
} 
?>
Ivan 04.06.2023
Код
AddEventHandler("main", "OnBeforeUserRegister", "OnBeforeUserRegisterHandler");

function OnBeforeUserRegisterHandler(&$arFields)
{
    if (SITE_ID == "s1") {
        $arFields["GROUP_ID"][] = 5;
        // Для сайта с ID "s1" отключаем подтверждение регистрации по email
        $arFields["CONFIRM_CODE"] = "";
        $arFields["ACTIVE"] = "Y";
    } elseif (SITE_ID == "s2") {
        $arFields["GROUP_ID"][] = 8;
        // Для сайта с ID "s2" включаем подтверждение регистрации по email
        $arFields["CONFIRM_CODE"] = randString(8);
        $arFields["ACTIVE"] = "N";
    }
}


доработал скрипт которая решает проблему с подтверждением почты, ибо для оптовых сайтов часто нужно чтоб модерация регистрации была  
Гость 08.12.2023
Добрый день
Подскажите как сделать проверку на совпадение что написал пользователь в if(strlen($arFields["UF_BAZA"]) > 0) //Если поле UF_BAZA заполнено
Допустим ели не дизайнер то будет зарегистрирован как обычный пользователь