Описание
CDBResult CUser::GetList(
mixed &by = "timestamp_x",
string &order = "desc",
array filter = array(),
array arParams=array()
)
Возвращает список пользователей в виде объекта класса CDBResult. Статический метод.
Смотрите также
Параметры
Параметр | Описание | С версии |
by | ссылка на переменную с полем для сортировки, может принимать значения:
- id - ID пользователя
- active - активность
- last_login - дата последней авторизации
- login -
имя входа
Если у вас задача найти пользователя именно по логину, то используйте CUser::GetByLogin. Этот метод ищет точное совпадение с логином.
- 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" => " ~_% ");
0
Алексей Сенин
06.11.2020 09:17:52
Сообщение непромодерировано, возможны ошибки и неточности.
|
А если нужно по Активен, группа "И" трём полям с "ИЛИ" ?
|
|
0
Николай Складанюк
25.05.2020 17:50:15
Сообщение непромодерировано, возможны ошибки и неточности.
|
Чтобы выбрать пользователей по подразделениям, используйте UF_DEPARTMENT, передав туда массив нужных подразделений, а не WORK_DEPARTMENT, как это указано в документации
|
|
0
Дмитрий Ерин
27.02.2020 12:46:18
|
Пример с получением списка пользователей у которых день рождения 13 ноября Код |
---|
$data = CUser::GetList(($by="ID"), ($order="ASC"),
array(
'PERSONAL_BIRTHDAY_DATE' => '11-13',
'ACTIVE' => 'Y'
)
);
while($arUser = $data->Fetch()) {
echo $arUser['ID'].' '.$arUser['NAME'].' '.$arUser['PERSONAL_BIRTHDAY']."<br>";
}
|
|
|
4
Антон Мельничихин
23.09.2017 12:25:36
|
Выборка пользователей из 4,5 группыКод |
---|
<pre>
global $USER;
$filter = Array("GROUPS_ID" => Array(4,5));
$rsUsers = CUser::GetList(($by = "NAME"), ($order = "desc"), $filter);
while ($arUser = $rsUsers->Fetch()) {
$arSpecUser[] = $arUser[EMAIL];
}
</pre> |
|
|
4
Илья Димитренко
20.09.2017 15:29:23
|
Фильтрация по дате регистрации не работает с DATE_REGISTER, тоесть такой фильтр не отработает: Код |
---|
$arFilter = array(
"DATE_REGISTER" => "29.08.2017 00:51:59"
); |
Но сработает такой: Код |
---|
$arFilter = array(
"DATE_REGISTER_1" => "29.08.2017 00:51:59",
"DATE_REGISTER_2" => "31.08.2017 23:59:59"
); |
Либо DATE_REGISTER_1 или DATE_REGISTER_2 по отдельности в качестве направления границ для выборки с/по
|
|
1
Евгений Кошелев
09.08.2017 10:01:33
|
Задача: Найти пользователей зарегистрированных в n дней назад или в заданном диапазоне дат Решение:Код |
---|
$i = 15; // Сколько дней назад зарегистрировался пользователей
$s1 = strtotime("-$i day");
$s2 = strtotime("today");
echo("от " . date('d.m.Y H:i:s', $s1)."\n");
echo("до " . date('d.m.Y H:i:s', $s2)."\n");
$filter = array(
"DATE_REGISTER_1" => date('d.m.Y H:i:s', $s1),
"DATE_REGISTER_2" => date('d.m.Y H:i:s', $s2),
"ACTIVE" => 'Y',
);
$elementsResult = CUser::GetList(($by="ID"), ($order="ASC"), $filter);
while ($rsUser = $elementsResult->Fetch())
{
echo $rsUser["LOGIN"] . " - " . $rsUser["DATE_REGISTER"] . "\n";
}
|
|
|
0
Кирилл Зудов
10.04.2017 12:54:08
|
У кого сегодня годовщина регистрации? Код |
---|
$arFilter = array(
"DATE_REGISTER" => date('-m-d'), // именно так: -месяц-день
"ACTIVE" => 'Y',
); |
|
|
3
Константин Манагаров
15.02.2017 11:01:05
|
Если нужно искать одно значение по многим полям, то перед вызовом можно установить логику Код |
---|
// по умолчанию "and"
$GLOBALS["FILTER_logic"] = "or";
$arFilter= array(
"NAME" => $fany."%",
"WORK_COMPANY" => $fany."%",
"WORK_PHONE" => $fany."%",
); |
где $fany - поисковый запрос. Тем самым можно в диалоге поиска отказаться от трех полей, оставив одно.
|
|
2
Павел Адаманов
19.11.2016 20:05:35
|
Работа с параметром IS_ONLINE 1 Необходимо создать обработчик событий в init.php (так как этот параметр не устанавливается автоматически) Код |
---|
use \Bitrix\Main\EventManager;
class Page
{
public static function OnBeforePrologHandler()
{
global $USER;
if ( $USER->IsAuthorized() )
{
// устанавливаем, что пользователь сейчас в сети
$USER->SetLastActivityDate( $USER->GetID() );
}
}
}
$handler = EventManager::getInstance()->addEventHandler(
'main',
'OnBeforeProlog',
array(
'Page',
'OnBeforePrologHandler'
)
);
|
2 Теперь можно использовать getList Код |
---|
$userId = 1; // ID пользователя
$onlineInter val = 180; // время, которое считать пользователя в сети после входа на сайт (по умолчанию 120 секунд)
$userBy = "id";
$userOrder = "desc";
$userFilter = array(
'ID' => $userId,
'ACTIVE' => 'Y'
);
$userParams = array(
'SELECT' => array(),
'NAV_PARAMS' => array(
'nTopCount' => 1
),
'FIELDS' => array(
'ID',
'ACTIVE',
'IS_ONLINE'
),
'ONLINE_INTERVAL' => $onlineInterval
);
$rsUser = CUser::GetList(
$userBy,
$userOrder,
$userFilter,
$userParams
);
if ($arResult['USER'] = $rsUser->Fetch())
{
print_r( $arResult['USER'] );
}
|
|
|
1
Владимир Беглецов
04.07.2015 13:50:57
|
Получить список пользователей, у которых пользовательские свойства (на примере UF_GEO_LOCATION_LON и UF_GEO_LOCATION_LAT) находятся в заданном диапазоне Код |
---|
$filter = array(
'><UF_GEO_LOCATION_LON' => array(37.333333, 37.999999),
'><UF_GEO_LOCATION_LAT' => array(55.333333, 55.999999),
);
$elementsResult = CUser::GetList(($by="ID"), ($order="DESC"), $filter); |
|
|
© «Битрикс»,
2001-2021,
«1С-Битрикс», 2021
Наверх
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.