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

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
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
Антон Мельничихин
Выборка пользователей из 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>
0
Илья Димитренко
Фильтрация по дате регистрации не работает с 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 по отдельности в качестве направления границ для выборки с/по
0
Евгений Кошелев
Задача: Найти пользователей зарегистрированных в 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
Кирилл Зудов
У кого сегодня годовщина регистрации?
Код
$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);
1
Дмитрий Кубицкий
Задача: Выбрать пользователей, которые никогда не заходили на сайт:

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

фильтры типа "!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();
Страницы: 1 2 3 След.
© «Битрикс», 2001-2018, «1С-Битрикс», 2018