getList
\Bitrix\Main\ORM\Query\Result public static \Bitrix\Iblock\IblockTable::getList( array $parameters = array() );
Возвращает выборку записей инфоблоков с фильтрацией, сортировкой и ограничением количества строк. Статический метод. Унаследован от \Bitrix\Main\ORM\Data\DataManager.
Параметры
| Параметр | Описание |
|---|---|
$parameters |
Массив параметров запроса. По умолчанию пустой массив. Допустимые ключи перечислены ниже |
Параметры запроса
| Параметр | Описание |
|---|---|
select |
Массив выбираемых полей. Поддерживает псевдонимы вида 'IBLOCK_NAME' => 'NAME' и пути связей, например TYPE.ID['ID', 'NAME', 'CODE', 'ACTIVE'] Если параметр не задан, используется |
filter |
Массив условий '[оператор]ПОЛЕ' => значение или объект \Bitrix\Main\ORM\Query\Filter\ConditionTree. Пример формата массива:[ '=ACTIVE' => 'Y', '>=SORT' => 100, '@ID' => [7, 12], ] Основные операторы массива:
Для точного сравнения строк задавайте |
order |
Массив поле => направление['SORT' => 'ASC', 'ID' => 'DESC']
Порядок ключей определяет приоритет сортировки. Если направление не указано и передан список имен полей, используется ASC. При отсутствии параметра или пустом массиве сортировка не задана |
group |
Массив полей группировки['IBLOCK_TYPE_ID'] Согласуйте |
limit |
Максимальное количество строк — положительное целое число. По умолчанию ограничение не задано'limit' => 20 |
offset |
Количество пропускаемых строк — неотрицательное целое число. По умолчанию строки не пропускаются. Для постраничного вывода используйте вместе с limit и стабильной сортировкой'offset' => 40 |
count_total |
Логическое значение. При true результат позволяет получить общее количество строк без ограничения страницы через getCount(). По умолчанию отдельный подсчет не включен |
runtime |
Массив дополнительных полей запроса, например вычисляемых полей ExpressionField[new \Bitrix\Main\ORM\Fields\ExpressionField('CNT', 'COUNT(*)')]Поле |
cache |
Параметры кеша['ttl' => 3600, 'cache_joins' => false]
|
data_doubling |
При false ORM заменяет условия фильтра по связям «один ко многим» подзапросами, чтобы они не размножали строки. По умолчанию размножение разрешено. Параметр не устраняет дубли от полей связи, явно включенных в select |
private_fields |
Разрешает обращаться к полям, которые ORM пометила приватными. По умолчанию false. Это настройка доступности полей ORM, а не проверка прав пользователя |
Возвращаемое значение
Объект \Bitrix\Main\ORM\Query\Result, в том числе для пустой выборки. Метод fetch() возвращает следующую запись как ассоциативный массив или false, если строки закончились. Метод fetchAll() возвращает массив оставшихся строк.
Сам getList() не возвращает число или false. При count_total = true количество доступно через getCount() объекта результата; группировка не меняет тип результата.
Состав ключей записи зависит от select и заданных псевдонимов. При стандартном select = ['*'] доступны следующие поля. Типы и допустимые значения соответствуют карте ORM; необязательные поля могут содержать null.
| Ключ | Описание |
|---|---|
ID |
Целочисленный первичный ключ с автоинкрементом — идентификатор инфоблока |
TIMESTAMP_X |
Дата и время изменения — объект \Bitrix\Main\Type\DateTime |
IBLOCK_TYPE_ID |
Строка — идентификатор типа инфоблока |
LID |
Строка — идентификатор сайта |
CODE |
Строка — символьный код инфоблока |
API_CODE |
Строка — символьный код API |
REST_ON |
Логическое поле — доступ через REST. Значения N, Y |
NAME |
Строка — название инфоблока |
ACTIVE |
Логическое поле — активность инфоблока. Значения N, Y |
SORT |
Целое число — индекс сортировки |
LIST_PAGE_URL, DETAIL_PAGE_URL, SECTION_PAGE_URL, CANONICAL_PAGE_URL |
Строки — шаблоны URL списка, элемента, раздела и канонического адреса |
PICTURE |
Целое число — идентификатор изображения инфоблока |
DESCRIPTION |
Строка — описание инфоблока |
DESCRIPTION_TYPE |
Тип описания: text или html |
XML_ID |
Строка — внешний идентификатор инфоблока |
TMP_ID |
Служебная строка |
INDEX_ELEMENT, INDEX_SECTION |
Логические поля — индексация элементов и разделов для поиска. Значения N, Y |
WORKFLOW, BIZPROC |
Логические поля — использование документооборота и бизнес-процессов. Значения N, Y |
SECTION_CHOOSER |
Способ выбора разделов: L — список, D — выпадающие списки, P — путь |
LIST_MODE |
Режим списка: C — совместный просмотр разделов и элементов, S — раздельный |
RIGHTS_MODE |
Режим прав: S — простой, E — расширенный |
SECTION_PROPERTY |
Логическое поле — привязка свойств к разделам. Значения N, Y |
PROPERTY_INDEX |
Состояние индекса свойств: N — отключен, Y — включен, I — недействителен |
VERSION |
Хранение свойств: 1 — общая таблица, 2 — отдельные таблицы инфоблока |
LAST_CONV_ELEMENT, SOCNET_GROUP_ID |
Служебные целочисленные поля — последний преобразованный элемент и идентификатор социальной группы |
EDIT_FILE_BEFORE, EDIT_FILE_AFTER |
Строки — файлы формы редактирования до и после полей |
FULLTEXT_INDEX |
Логическое поле — полнотекстовый индекс. Значения N, Y |
Особенности
Метод получает настройки инфоблоков, а не их элементы. Фильтр по активности и проверка прав пользователя автоматически не добавляются. Условие LID относится к столбцу инфоблока; полные привязки к сайтам хранятся отдельно в IblockSiteTable.
Неизвестный ключ массива $parameters или неверное направление сортировки вызывает \Bitrix\Main\ArgumentException. Ошибки полей, связей и выполнения SQL также могут привести к исключению.
Пример
Пример выполняется с подключенным ядром Bitrix. Он выводит первые 20 активных инфоблоков и их общее количество. При выводе в браузере для переноса строк используйте подходящую HTML-разметку.
<?php
use Bitrix\Iblock\IblockTable;
use Bitrix\Main\Loader;
try
{
if (!Loader::includeModule('iblock'))
{
echo 'Не удалось подключить модуль iblock';
return;
}
$result = IblockTable::getList([
'select' => ['ID', 'NAME', 'CODE', 'IBLOCK_TYPE_ID', 'ACTIVE', 'SORT'],
'filter' => ['=ACTIVE' => 'Y'],
'order' => ['SORT' => 'ASC', 'ID' => 'ASC'],
'limit' => 20,
'offset' => 0,
'count_total' => true,
]);
echo 'Всего активных инфоблоков: ' . $result->getCount() . PHP_EOL;
$hasRows = false;
while ($iblock = $result->fetch())
{
$hasRows = true;
echo (int)$iblock['ID'] . ': ';
echo htmlspecialchars($iblock['NAME'], ENT_QUOTES, 'UTF-8') . PHP_EOL;
}
if (!$hasRows)
{
echo 'Инфоблоки не найдены';
}
}
catch (\Throwable $exception)
{
echo 'Ошибка: ' . htmlspecialchars($exception->getMessage(), ENT_QUOTES, 'UTF-8');
}