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

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 LAST_NAME
DATE_REGISTER PERSONAL_CITY WORK_STREET SECOND_NAME
PERSONAL_PROFESSION PERSONAL_STATE WORK_MAILBOX STORED_HASH
CHECKWORD_TIME EXTERNAL_AUTH_ID CONFIRM_CODE LOGIN_ATTEMPTS
LAST_ACTIVITY_DATE AUTO_TIME_ZONE TIME_ZONE PASSWORD
CHECKWORD LID
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);


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

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

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

Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
Страницы: 1 2 3 След.
0
Кирилл Зудов
У кого сегодня годовщина регистрации?
Код
$arFilter = array(
   "DATE_REGISTER" => date('-m-d'), // именно так: -месяц-день
   "ACTIVE" => 'Y',
);
1
Константин Манагаров
Если нужно искать одно значение по многим полям, то перед вызовом можно установить логику
Код
// по умолчанию "and"
$GLOBALS["FILTER_logic"] = "or";

$arFilter= array(
   "NAME" => $fany."%",
   "WORK_COMPANY" => $fany."%",
   "WORK_PHONE" => $fany."%",
);

где $fany - поисковый запрос.
Тем самым можно в диалоге поиска отказаться от трех полей, оставив одно.
0
Павел Адаманов
Работа с параметром 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'] );
}
0
Владимир Беглецов
Получить список пользователей, у которых пользовательские свойства (на примере 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);
2
Александр Перепелица
При фильтрации по EMAIL происходит выборка по подстроке (т.е. для test@example.com выберутся testtest@example.com, testtesttest@example.com и т. д.):

Код
$rsUsers = CUser::GetList($by="", $order="", array('EMAIL' => $EMAIL);

Для выборки по точному совпадению делать так:

Код
$rsUsers = CUser::GetList($by="", $order="", array('=EMAIL' => $EMAIL);
0
Дмитрий Кубицкий
Задача: Выбрать пользователей, которые никогда не заходили на сайт:

Код
$rs = CUser::GetList($by = "id", $order = "asc", array("LAST_LOGIN" => false));
7
Андрей Загальский
Задача: Получить список пользователей с указанным номером телефона

фильтры типа "!PERSONAL_MOBILE" => false - не работают,
но работает "PERSONAL_MOBILE" => " _% " (для поиска не пустых значений)
Код
$filter = Array(
       "ACTIVE" => "Y",
       "PERSONAL_MOBILE" => "_%",
   );
   $arSel = array(
      "NAME", "PERSONAL_MOBILE",
   );
   $rsUsers = CUser::GetList(($by="name"), ($order="asc"), $filter, array("FIELDS"=>$arSel)); // выбираем пользователей
   $rsUsers->NavStart(5); // разбиваем постранично по 5 записей
   $rsUsers->bShowAll = false;
   while($arr = $rsUsers->GetNext()) :
      echo'<pre>';print_r($arr);echo'</pre>';
   endwhile;
   $rsUsers->NavPrint();
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)));

11
Иван Неслуховский
Если необходимо отфильтровать пользователей по массиву 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 2 3 След.
© «Битрикс», 2001-2017, «1C-Битрикс», 2017