Блог Горошко Андрея 1C-Битрикс Постраничная навигация в D7: Класс Bitrix\Main\UI\PageNavigation

Постраничная навигация в D7: Класс Bitrix\Main\UI\PageNavigation

В старом ядре навигация была жестко привязана к объекту результата выборки (CDBResult).

В D7 навигация — это отдельный, независимый объект, который «знает» о текущей странице и размере выборки.

Он используется в связке с ORM getList и компонентом main.ui.grid.

Шаг 1: Инициализация объекта навигации

Обычно объект навигации создается в начале работы компонента или контроллера.

use Bitrix\Main\UI\PageNavigation;

$navId = "page"; // ID параметра в URL (например, ?page=2)
$nav = new PageNavigation($navId);

$nav->allowAllRecords(true) // Разрешить показывать "Все" записи (?page=all)
    ->setPageSize(20)       // Количество на странице по умолчанию
    ->initFromUri();        // Прочитать текущую страницу и размер из URL

Шаг 2: Использование в ORM-запросе

Объект $nav предоставляет методы getLimit() и getOffset(), которые идеально подходят для getList.

use Bitrix\Iblock\ElementTable;

$query = ElementTable::query()
    ->setSelect(['ID', 'NAME'])
    ->setFilter(['IBLOCK_ID' => 5])
    ->setOrder(['ID' => 'DESC']);

// 1. Получаем общее количество записей (без учета пагинации)
// Это нужно для корректного построения ссылок навигации
// Важно сделать это ДО применения лимитов, либо использовать countTotal
$totalCount = $query->queryCountTotal();
$nav->setRecordCount($totalCount); // Передаем общее кол-во в навигатор

// 2. Применяем параметры навигации к запросу
$query->setOffset($nav->getOffset());
$query->setLimit($nav->getLimit());

$result = $query->exec();

// 3. Получаем данные
while ($row = $result->fetch()) {
    // ...
}

Шаг 3: Вывод навигации в шаблоне (UI)

Есть два способа вывести навигацию.

Способ А: Через компонент main.pagenavigation (Универсально)
Этот компонент рисует классическую цепочку страниц (1, 2, 3… След).

<?
$APPLICATION->IncludeComponent(
   "bitrix:main.pagenavigation",
   "",
   array(
      "NAV_OBJECT" => $nav, // Наш объект PageNavigation
      "SEF_MODE" => "N",
   ),
   false
);
?>

Способ Б: Через компонент main.ui.grid (Если вы используете грид)
Если вы используете системный грид, просто передайте объект в параметры грида.

$APPLICATION->IncludeComponent(
    'bitrix:main.ui.grid',
    '',
    [
        'GRID_ID' => 'my_grid',
        'NAV_OBJECT' => $nav, // Грид сам отрисует пагинацию в футере таблицы
        'TOTAL_ROWS_COUNT' => $totalCount,
        // ... другие параметры
    ]
);

Вывод:
Класс PageNavigation делает логику разбиения на страницы прозрачной. Вы четко разделяете: получение параметров из URL, запрос к БД и отрисовку HTML. Это стандарт разработки для всех современных интерфейсов в Битрикс.

PageNavigation, постраничная навигация D7, пагинация Битрикс, initFromUri, getLimit, getOffset, main.ui.grid пагинация.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Разработка интернет-магазина на 1С-Битрикс с интеграцией программы лояльности и CRMРазработка интернет-магазина на 1С-Битрикс с интеграцией программы лояльности и CRM

Реализация функционала «с интеграцией программы лояльности и CRM» на платформе 1С-Битрикс позволяет кардинально повысить конверсию магазина, автоматизировать рутинные операции менеджеров и предоставить покупателям безупречный сервис. двусторонняя передача профилей клиентов, истории

Create Controller: Руководство разработчикаCreate Controller: Руководство разработчика

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Create Controller: Руководство разработчика». Вы узнаете экспертные методики работы с create controller и

Как использовать метод SDK sale.tradePlatform.list в Битрикс24Как использовать метод SDK sale.tradePlatform.list в Битрикс24

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Как использовать метод SDK sale.tradePlatform.list в Битрикс24», проанализируем