Полный цикл в digital

Устройство постраничной навигации d7

Классы для постраничной навигации:

  • Класс \Bitrix\Main\UI\PageNavigation для простой навигации
  • Класс \Bitrix\Main\UI\ReversePageNavigation для обратной навигации
  • Класс \Bitrix\Main\UI\AdminPageNavigation для навигации в админке
  • Компонент main.pagenavigation с шаблонами .default (основан на round старого компонента), admin (для админки), modern (для гридов)

Постраничка поддерживает как параметры GET, так и ЧПУ. Теперь нужно явно указывать идентификатор навигации. Поддерживаются URL следующего вида, где nav-cars и nav-books идентификаторы двух разных постраничек на одной странице:

  1. /page.php?nav-cars=page-5&nav-books=page-2&other=params
  2. /page.php?nav-cars=page-5-size-20&nav-books=page-2
  3. /page.php?nav-cars=page-all&nav-books=page-2
  4. /dir/nav-cars/page-2/size-20/
  5. /dir/nav-cars/page-all/?other=params
  6. /dir/nav-cars/page-5/nav-books/page-2/size-10

Прямая постраничная навигация

<?
// фильтр
$filter = array("=IBLOCK_ID" => 6);
// прификс который добавится в URL
$nav = new \Bitrix\Main\UI\PageNavigation("nav-more-news");
// инициализация навигации
$nav->allowAllRecords(true)
    // количество 
    ->setPageSize(5)
    // метод инициализирует навигацию от URI
    ->initFromUri();
// запрос в базу данных на d7    
$newsList = \Bitrix\Iblock\ElementTable::getList(
    array(
        "filter" => $filter,
        "count_total" => true,
        "offset" => $nav->getOffset(),
        "limit" => $nav->getLimit(),
    )
);
// получаем число записей
$nav->setRecordCount($newsList->getCount());
// перебираем ответ
while ($news = $newsList->fetch()) {
    pp($news);
}
?>
<?
$APPLICATION->IncludeComponent(
    "bitrix:main.pagenavigation",
    "",
    array(
        // передаем объект 
        "NAV_OBJECT" => $nav,
        // включение/отключение ЧПУ или GET
        "SEF_MODE" => "N",
    ),
    false
);
?>

Обратная постраничная навигация

<?
// фильтр
$filter = array("=IBLOCK_ID" => 6);
// количество элементов, удовлитворяющих фильтр
$cnt = \Bitrix\Iblock\ElementTable::getCount($filter);
// прификс который добавится в URL и количество элементов
$nav = new \Bitrix\Main\UI\ReversePageNavigation("nav-news", $cnt);
// инициализация навигации
$nav->allowAllRecords(true)
    // количество 
    ->setPageSize(5)
    // метод инициализирует навигацию от URI
    ->initFromUri();
// запрос в базу данных на d7    
$newsList = \Bitrix\Iblock\ElementTable::getList(
    array(
        "filter" => $filter,
        "offset" => $nav->getOffset(),
        "limit" => $nav->getLimit(),
    )
);
// перебираем ответ
while ($news = $newsList->fetch()) {
    pp($news);
}
?>
<?
$APPLICATION->IncludeComponent(
    "bitrix:main.pagenavigation",
    "",
    array(
        // передаем объект 
        "NAV_OBJECT" => $nav,
        // включение/отключение ЧПУ или GET
        "SEF_MODE" => "N",
    ),
    false
);
?>

Постраничная навигация без COUNT

<?
// фильтр
$filter = array("=IBLOCK_ID" => 6);
// прификс который добавится в URL
$nav = new \Bitrix\Main\UI\PageNavigation("nav-less-news");
// инициализация навигации
$nav->allowAllRecords(true)
    // количество
    ->setPageSize(5)
    // метод инициализирует навигацию от URI
    ->initFromUri();
// запрос в базу данных на d7    
$newsList = \Bitrix\Iblock\ElementTable::getList(
    array(
        "filter" => $filter,
        "offset" => ($offset = $nav->getOffset()),
        "limit" => (($limit = $nav->getLimit()) > 0 ? $limit + 1 : 0),
    )
);
// переменная для подсчета
$n = 0;
// перебираем ответ
while ($news = $newsList->fetch()) {
    $n++;
    if ($limit > 0 && $n > $limit) {
        break;
    }
}
// возврашает число записей
$nav->setRecordCount($offset + $n);
?>
<?
$APPLICATION->IncludeComponent(
    "bitrix:main.pagenavigation",
    "",
    array(
        // передаем объект 
        "NAV_OBJECT" => $nav,
        // включение/отключение ЧПУ или GET
        "SEF_MODE" => "Y",
        // отключаем COUNT
        "SHOW_COUNT" => "N",
    ),
    false
);
?>
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг