Блог Горошко Андрея 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 пагинация.

Мой рейтинг:

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

Related Post

Управление заголовками и мета-тегами в Битрикс: SetPageProperty, ShowTitle, ShowMetaУправление заголовками и мета-тегами в Битрикс: SetPageProperty, ShowTitle, ShowMeta

Средний рейтинг Еще нет оценок Правильное управление заголовками (<title>) и мета-тегами (description, keywords, robots) — это фундамент SEO-продвижения. В Битрикс за это отвечает глобальный объект $APPLICATION. С его помощью можно динамически устанавливать и

Современные компоненты Битрикс: Переходим на class.phpСовременные компоненты Битрикс: Переходим на class.php

Средний рейтинг Еще нет оценок Традиционно вся логика компонента Битрикс размещалась в файле component.php. Это простой и понятный подход, но для сложных компонентов он приводит к «лапше» из кода. Современный стандарт

Правильное использование BB кода в 1С-БитриксПравильное использование BB кода в 1С-Битрикс

Средний рейтинг Еще нет оценок В 1С-Битрикс BB код используется для форматирования текста в различных модулях, таких как форумы, задачи, блоги и комментарии. Для его обработки используется класс CTextParser. Вот