Реализация пагинации в Битрикс через API
В этом руководстве разберем, как правильно разбить данные на страницы с помощью API Битрикс.
1. Инициализация переменных
Получаем параметры page (текущая страница) и count (количество элементов на странице):
$count = $_REQUEST['count'] ?? 5; // По умолчанию 5 элементов на странице
$page = $_REQUEST['page'] ?? 1; // По умолчанию первая страница2. Получение данных с фильтрацией
Добавляем поиск по имени и артикулу, если передан параметр s:
if ($_REQUEST['s']) {
$arFilterS = [
"LOGIC" => "OR",
$arFilter + ['NAME' => '%' . trim($_REQUEST['s']) . '%'],
$arFilter + ['PROPERTY_ARTNUMBER' => '%' . trim($_REQUEST['s']) . '%'],
];
$arFilter = $arFilterS;
}
// Получаем общее количество элементов
$allCnt = CIBlockElement::GetList(
["ID" => "DESC"],
$arFilter,
[],
[],
false
);
$arResult['ALL_COUNT'] = $allCnt;
$arResult['PAGE_COUNT'] = $count;
// Получаем элементы с пагинацией
$my_elements = CIBlockElement::GetList(
["ID" => "DESC"],
$arFilter,
false,
[
'nPageSize' => $count, // Количество элементов на странице
'iNumPage' => $page, // Текущая страница
'checkOutOfRange' => true // Защита от выхода за пределы диапазона
],
['ID', 'NAME', 'PROPERTY_ARTNUMBER', 'DATE_CREATE', 'CATALOG_PRICE_1']
);
while ($arItem = $my_elements->GetNext()) {
$arResult['ITEMS'][] = $arItem;
}3. Вывод пагинации в HTML
Генерируем ссылки на страницы:
<? if ($arResult['ALL_COUNT'] > $arResult['PAGE_COUNT']) : ?>
<div class="nav-footer">
<?
$perPage = ceil($arResult['ALL_COUNT'] / $arResult['PAGE_COUNT']);
for ($i = 1; $i <= $perPage; $i++) : ?>
<? if ($i != $_REQUEST['page']) : ?>
<a class="nav-item" href="?page=<?= $i ?>&count=<?= $_REQUEST['count'] ?>&s=<?= $_REQUEST['s'] ?>"><?= $i ?></a>
<? else : ?>
<span class="nav-item"><?= $i ?></span>
<? endif; ?>
<? endfor; ?>
</div>
<? endif; ?>Ключевые моменты
-
nPageSize— количество элементов на странице. -
iNumPage— текущая страница. -
checkOutOfRange— предотвращает ошибки при некорректном номере страницы.
Используйте этот код для корректной пагинации в Битрикс, чтобы улучшить навигацию и SEO-оптимизацию вашего сайта.