Документация для разработчиков

GetList

CDBResult CUser::GetList(
 mixed &by = "timestamp_x",
string &order = "desc",
array filter = array(),
array arParams=array() )

Возвращает список пользователей в виде объекта класса CDBResult. Статический метод.

Параметры

ПараметрОписание С версии
byссылка на переменную с полем для сортировки, может принимать значения:
  • id - ID пользователя
  • active - активность
  • last_login - дата последней авторизации
  • login - имя входа
  • email - E-Mail адрес
  • name - имя
  • ntopcount - параметр постраничной навигации, ограничивающий количество возвращаемых элементов
  • last_name - фамилия
  • timestamp_x - дата изменения
  • date_register - дата регистрации
  • personal_profession - профессия
  • personal_www - WWW-страница
  • personal_icq - номер ICQ
  • personal_gender - пол ("M" - мужской; "F" - женский)
  • personal_birthday - день рождения
  • personal_photo - ID файла-фотографии
  • personal_phone - номер телефона
  • personal_fax - номер факса
  • personal_mobile - номер мобильного
  • personal_pager - номер пейджера
  • personal_street - улица
  • personal_mailbox - почтовый ящик
  • personal_city - город
  • personal_state - область / край
  • personal_zip - почтовый индекс
  • personal_country - код страны
  • personal_notes - дополнительные заметки
  • work_company - наименования компании
  • work_department - отдел
  • work_position - должность
  • work_www - WWW-страница компании
  • work_phone - рабочий телефон
  • work_fax - рабочий факс
  • work_pager - рабочий пейджер
  • work_street - улица компании
  • work_mailbox - почтовый ящик компании
  • work_city - город компании
  • work_state - область / край компании
  • work_zip - почтовый индекс компании
  • work_country - код страны компании
  • work_profile - направление деятельности компании
  • work_notes - дополнительные заметки касаемо места работы
  • admin_notes - комментарий администратора

Начиная с версии ядра 11.0.13 в параметре можно передавать массив вида array("field1"=>"asc", "field2"=>"desc") для множественной сортировки. Значения ключей массива совпадают с перечисленными выше.

оrderСсылка на переменную с порядком сортировки, может принимать значения:
  • asc - по возрастанию
  • desc - по убыванию

При использовании массива в параметре by данный параметр игнорируется. Значения c nulls не работают, например: desc,nulls.

filterМассив для фильтрации пользователей. (Типы фильтрации) В массиве допустимы следующие индексы:
  • 1ID - по ID пользователя
  • XML_ID - по XML_ID пользователя
  • TIMESTAMP_1 - дата изменения профайла пользователя "с"
  • TIMESTAMP_2 - дата изменения профайла пользователя "по"
  • LAST_LOGIN_1 - дата последнего логина пользователя "с"
  • LAST_LOGIN_2 - дата последнего логина пользователя "по"
  • LAST_ACTIVITY - интервал в секундах
  • ACTIVE - фильтр по активности (Y|N)
  • 1LOGIN_EQUAL - по имени входа (ищет прямое совпадение с логином)
  • 1LOGIN - по имени входа (ищет подстроку в логине)
  • 1NAME - по имени и фамилии
  • 1EMAIL - по E-Mail адресу
  • 1COUNTRY_ID - по коду страны, оставлен для обратной совместимости. Сейчас при его использовании производится фильтрация по WORK_COUNTRY.
  • GROUPS_ID - по группам (массив с кодами групп пользователей)
  • PERSONAL_BIRTHDAY_1 - день рождения "с"
  • PERSONAL_BIRTHDAY_2 - день рождения "по"
  • 1KEYWORDS - по нижеследующим полям профайла помеченных символом - *
  • 1* PERSONAL_PROFESSION - профессия
  • 1* PERSONAL_WWW - WWW-страница
  • 1* PERSONAL_ICQ - номер ICQ
  • 1* PERSONAL_GENDER - пол ("M" - мужской; "F" - женский)
  • 1* PERSONAL_PHOTO - ID файла - фотографии (таблица b_file)
  • 1* PERSONAL_PHONE - номер телефона
  • 1* PERSONAL_FAX - номер факса
  • 1* PERSONAL_MOBILE - номер мобильного
  • 1* PERSONAL_PAGER - номер пейджера
  • 1* PERSONAL_STREET - улица
  • 1* PERSONAL_MAILBOX - почтовый ящик
  • 1* PERSONAL_CITY - город
  • 1* PERSONAL_STATE - область / край
  • 1* PERSONAL_ZIP - почтовый индекс
  • 1* PERSONAL_COUNTRY - код страны (хранится в файлах \bitrix\modules\main\lang\ru\tools.php, \bitrix\modules\main\lang\en\tools.php)
  • 1* PERSONAL_NOTES - дополнительные заметки
  • 1* WORK_COMPANY - наименования компании
  • 1* WORK_DEPARTMENT - отдел
  • 1* WORK_POSITION - должность
  • 1* WORK_WWW - WWW-страница компании
  • 1* WORK_PHONE - рабочий телефон
  • 1* WORK_FAX - рабочий факс
  • 1* WORK_PAGER - рабочий пейджер
  • 1* WORK_STREET - улица компании
  • 1* WORK_MAILBOX - почтовый ящик компании
  • 1* WORK_CITY - город компании
  • 1* WORK_STATE - область / край компании
  • 1* WORK_ZIP - почтовый индекс компании
  • 1* WORK_COUNTRY - код страны компании (хранится в файлах \bitrix\modules\main\lang\ru\tools.php, \bitrix\modules\main\lang\en\tools.php)
  • 1* WORK_PROFILE - направление деятельности компании
  • 1* WORK_NOTES - дополнительные заметки касаемо места работы
  • 1* ADMIN_NOTES - комментарий администратора (доступен для просмотра и редактирования только администратору сайта)
1 - в данных полях допускается сложные условия. Сложные условия для данного поля работают только при указании: ID. При указании !ID и >ID, сложные условия работать не будут.
* - поиск по "KEYWORDS" по сути является поиском по полям отмеченных символом "*"
arParametersМассив с дополнительными параметрами метода. Может содержать ключи:

SELECT - массив с идентификаторами пользовательских полей для их выборки в результат, например array("UF_TEXT_1", "UF_STRUCTURE"). Для указания выборки всех полей используйте маску: array("UF_*").

NAV_PARAMS - массив с параметрами навигации, может использоваться для ограничения размера выборки. Например: array("nPageSize"=>"20"). При указании NAV_PARAMS строится ограниченный по размеру список результатов, учитывающий номер страницы в постраничной навигации (для mysql выборка производится с указанием limit). С версии ядра 11.0.14 в массиве можно указать параметр "nTopCount" для ограничения выборки по количеству записей.

FIELDS (с версии ядра 11.0.13) - массив с идентификаторами полей для выборки. Если не указан или пустой, то выбираются все поля. Возможные значения:

ID PERSONAL_WWW PERSONAL_ZIP IS_ONLINE
ACTIVE PERSONAL_ICQ PERSONAL_COUNTRY WORK_CITY
LAST_LOGIN PERSONAL_GENDER PERSONAL_NOTES WORK_STATE
LOGIN PERSONAL_PHOTO WORK_COMPANY WORK_ZIP
EMAIL PERSONAL_PHONE WORK_DEPARTMENT WORK_COUNTRY
NAME PERSONAL_FAX WORK_POSITION WORK_PROFILE
LAST_NAME PERSONAL_MOBILE WORK_WWW WORK_NOTES
SECOND_NAME PERSONAL_PAGER WORK_PHONE ADMIN_NOTES
TIMESTAMP_X PERSONAL_STREET WORK_FAX XML_ID
PERSONAL_BIRTHDAY PERSONAL_MAILBOX WORK_PAGER PASSWORD
DATE_REGISTER PERSONAL_CITY WORK_STREET LOGIN_ATTEMPTS
PERSONAL_PROFESSION PERSONAL_STATE WORK_MAILBOX STORED_HASH
CHECKWORD_TIME EXTERNAL_AUTH_ID CONFIRM_CODE TITLE
LAST_ACTIVITY_DATE AUTO_TIME_ZONE TIME_ZONE LID Не рекомендуется устанавливать 'LID' => SITE_ID. В этом случае в запросе будет (upper(U.LID) like upper('%s1%').

Лучше использовать новое ядро: \Bitrix\Main\UserTable::getList(array("filter"=>array("=LID" => 's1'))); .
CHECKWORD
6.0.2

См. также

Примеры использования

<?
$filter = Array
(
"ID" => "1 | 2",
"TIMESTAMP_1" => "04.02.2004", // в формате текущего сайта
"TIMESTAMP_2" => "04.02.2005",
"LAST_LOGIN_1" => "01.02.2004",
"ACTIVE" => "Y",
"LOGIN" => "nessy | admin",
"NAME" => "Виталий & Соколов",
"EMAIL" => "mail@server.com | mail@server.com",
"KEYWORDS" => "www.bitrix.ru",
"PERSONAL_PROFESSION" => "системотехник",
"PERSONAL_GENDER" => "M",
"PERSONAL_COUNTRY" => "4 | 1", // Беларусь или Россия
"ADMIN_NOTES" => "\"UID = 145\"",
"GROUPS_ID" => Array(1,4,10)
);
$rsUsers = CUser::GetList(($by="personal_country"), ($order="desc"), $filter); // выбираем пользователей
$is_filtered = $rsUsers->is_filtered; // отфильтрована ли выборка ?
$rsUsers->NavStart(50); // разбиваем постранично по 50 записей
echo $rsUsers->NavPrint(GetMessage("PAGES")); // печатаем постраничную навигацию
while($rsUsers->NavNext(true, "f_")) :
echo "[".$f_ID."] (".$f_LOGIN.") ".$f_NAME." ".$f_LAST_NAME."<br>";
endwhile;
?>

Пример нерабочего вызова, так как оба параметра передаются по значению:

$rsUsers = CUser::GetList(array('sort' => 'asc'), 'sort');

Пример рабочего вызова:

$order = array('sort' => 'asc');
$tmp = 'sort'; // параметр проигнорируется методом, но обязан быть
$rsUsers = CUser::GetList($order, $tmp);

Для фильтрации пользователей с незаполненным полем Город (для других текстовых полей - аналогично):

$filter = array("PERSONAL_CITY" => " ~_% ");


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Страницы: Пред. 1 2 3 След.
0
electroid
Выводим на сайте список из 10 последних авторизованных пользователей


Код
$by = 'last_login';
$order = 'desc';
$arParams["NAV_PARAMS"] = array('nTopCount' => 10);
$rsUsers = CUser::getList($by, $order, array(), $arParams);                        
while ($rsUser = $rsUsers->Fetch()) 
{
    echo $rsUser["LOGIN"] . "<br />";
}
3
kudm
Задача: выбрать определенных пользователей, которые НЕ входят в конкретную группу. Стандартный фильтр не позволяет задать отрицание по группам. Решение в два шага.
Решение:
Код
// Сперва выберем ID пользователей, которые входят в ту группу, по которой нужно сделать исключение
$arUsers = CGroup::GetGroupUs er(3);

// На втором шаге, используя сложную логику сделаем отрицание по выбранным ID пользователей
$rsUsers = CUser::GetList($by = "", $order = "", array("ID" => "~".implode("& ~", $arUsers)));

12
Иван Неслуховский
Если необходимо отфильтровать пользователей по массиву ID, передача массива параметром не пройдёт.
Так не сработает:
Код
$users = array(1, 2, 3, 8, 20);
$bxUsers = CUser::GetList($a, $b, array('ID' => $users));

а использование "сложного условия" в виде строки сработает, в данном случае это будет оператор ИЛИ:
Код
$users = array(1, 2, 3, 8, 20);
$bxUsers = CUser::GetList($a, $b, array('ID' => implode('|', $users)));
1
Денис Черечукин
Узнать количество пользователей выбранных по фильтру:

Код
        $rsUsers = CUser::GetList(
            $arOrder,
            $cdv,
            Array("LAST_LOGIN_1"=>$DATE_LAST_LOGIN), 
            Array('NAV_PARAMS' => array("nPageSize" => 1,"bDescPageNumbering" => "N","bShowAll" => "N"  )
        );        
        echo $rsUsers->NavRecordCount;
1
Сергей Покоев
При фильтрации по пользовательскому полю типа список можно фильтровать. Но нельзя вывести все не заполненные элементы или заполненные, кроме одного значения. Т. е. логика или в данном случае не поддерживается
Можно вывести либо пользователей, у которых значение свойства установлено и не равно определённому значению:
Код
<?

$arDB = CUser::GetList($a, $b,  array("!UF_LIST"=>5), array("SELECT"=>array("UF_LIST")));
while ($arP = $arDB->Fetch())
{
  echo "<pre>";
  print_r ($arP);
  $rsEnum = CUserFieldEnum::GetList(array(), array("ID" =>$arP["UF_LIST"])); 
  $arEnum = $rsEnum->GetNext();
  echo $arEnum["VALUE"];
}

?>

либо пользователей, у которых в принципе нет значения у поля UF_LIST. Фильтр будет таким:
Код
array("UF_LIST"=>false)
1
Андрей Рыжкин
Чтобы задавать сортировку по пользовательскому свойству типа Дата нужно дописать _VALUE в коде свойства, т.е:
Код
$by = 'UF_CODE_VALUE'
6
Михаил Калугин
У кого сегодня день рождения?
Код
$arFilter = array(
   "PERSONAL_BIRTHDAY_DATE" => date('m-d'), // именно так: месяц-день
   "ACTIVE" => 'Y',
);
2
Дмитрий Гукетлев
Код
# TIMESTAMP_1 - дата изменения профайла пользователя "с"
# TIMESTAMP_2 - дата изменения профайла пользователя "по" 


Если заглянуть в код, то можно увидеть что эти параметры отбрасывают часы и минуты. Чтобы фильтровать по дате изменения с точностью до секунды можно использовать:
Код
# TIMESTAMP_X_1
# TIMESTAMP_X_2
3
kagamisorano
Задача: Отфильтровать пользователей по дате регистрации и вывести только активных.

Решение:

Код
$cUser = new CUser; 
$sort_by = "ID";
$sort_ord = "ASC";
$arFilter = array(
   "DATE_REGISTER_1" => "21.12.2010 00:00:00",
   "DATE_REGISTER_2" => "21.12.2010 23:59:59",
   "ACTIVE" => 'Y',
);
$dbUsers = $cUser->GetList($sort_by, $sort_ord, $arFilter);
while ($arUser = $dbUsers->Fetch()) 
{
   echo $arUser["EMAIL"]." ".$arUser["DATE_REGISTER"]."<br>";
}
1
Евгений Шеленков
Задача: Нужно вывести всех пользователей учитывая сортировкой по рейтингу.

Решение:
Код
$ratingId = 1;
$arParam["SELECT"][]="RATING_".$ratingId;

$dbUsers = CUser::GetList(
    $by="RATING_".$ratingId,
    $order="desc",
    $arFilter,
    $arParam
); 

$ratingId - идентификатор рейтинга;
$dbUsers - CDBResult с данными пользователей, значение рейтинга хранится в поле "RATING_".$ratingId;
Страницы: Пред. 1 2 3 След.
© «Битрикс», 2001-2019, «1С-Битрикс», 2019
Наверх