Достаточно часто требуется регистрировать пользователя в определенную группу, в зависимости от того какую форму регистрации прошел пользователь. Это достаточно легко проделать с помощью события 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;
}
}
?>
![]()
Максим
|
||
добрый день.
а как сделать чтобы выбор группы зависел от выбора ее из списка? пробовал так:
Но есть один момент. Ваш код при вставке его в файл init.php делает так, что перестает отображаться капча и нельзя сделать полное тестирование системы (может и еще что ...) Зато если вставлять вариант при многосайтовости, то такой проблемы не возникает. помогите пожалуйста решить эти проблемы. |
||
![]()
Александр Белоусов
|
Михаил, привет. В видео вы говорили что приложите файл как вы сверстали форму регистрации. Где можно посмотреть? В частности меня интересует как скрыли пользовательское поле..Благодарю за полезный контент
|
На нем, уже много видеоуроков по 1С-Битрикс. Как одиночные видео так и серии видеоуроков Перейти на канал
Совсем скоро выйдет видеокурс по разработке доски объявлений с мобильным приложением. Подписывайтесь и будьте в курсе: