Список элементов инфоблока с постраничной навигацией
Каноничная реализация списка элементов через CIBlockElement::GetList с постраничкой через CDBResult->NavString и настройкой количества на странице.
Как использовать
- Скопируйте нужный фрагмент кода.
- Вставьте в свой проект и при необходимости измените под задачу.
- Проверьте зависимости и окружение (версии, переменные).
Вывод списка элементов инфоблока с постраничной навигацией через стандартный механизм Bitrix. Используйте в компонентах каталога, новостей, статей для корректной работы пагинации.
use Bitrix\Main\Loader;
/**
* Получить список элементов с постраничкой
* @param int $iblockId ID инфоблока
* @param array $filter Массив фильтрации
* @param array $sort Массив сортировки ['FIELD' => 'SORT', 'ORDER' => 'ASC']
* @param int $pageSize Количество элементов на странице
* @return array ['items' => [], 'nav' => string, 'navObject' => CDBResult]
*/
function getElementsListWithPagination($iblockId, $filter = [], $sort = [], $pageSize = 20) {
if (!Loader::includeModule('iblock')) {
return ['items' => [], 'nav' => '', 'navObject' => null];
}
$defaultFilter = [
'IBLOCK_ID' => $iblockId,
'ACTIVE' => 'Y'
];
$filter = array_merge($defaultFilter, $filter);
$defaultSort = ['SORT' => 'ASC', 'ID' => 'DESC'];
$sort = !empty($sort) ? $sort : $defaultSort;
$nav = new \CDBResult();
$nav->NavStart($pageSize);
$res = CIBlockElement::GetList(
$sort,
$filter,
false,
[
'nPageSize' => $pageSize,
'iNumPage' => $nav->NavPageNomer,
'bShowAll' => false
],
['ID', 'NAME', 'CODE', 'PREVIEW_TEXT', 'PREVIEW_PICTURE', 'DATE_CREATE', 'SORT']
);
$items = [];
while ($item = $res->GetNextElement()) {
$fields = $item->GetFields();
$items[] = $fields;
}
$navString = $res->GetPageNavStringEx(
$nav,
'',
'standard',
true
);
return [
'items' => $items,
'nav' => $navString,
'navObject' => $nav,
'totalCount' => $res->NavRecordCount
];
}
Usage:
// В component.php
$result = getElementsListWithPagination(
5,
['SECTION_ID' => 10],
['DATE_CREATE' => 'DESC'],
12
);
foreach ($result['items'] as $item) {
echo $item['NAME'];
}
// Вывод навигации в шаблоне
echo $result['nav'];
Notes:
⚠️ CDBResult->NavStart() должен вызываться до CIBlockElement::GetList(). Для AJAX-пагинации используйте параметр iNumPage из GET-запроса. Количество элементов на странице влияет на производительность — не ставьте больше 50 без кеширования.