Постраничная навигация в Битрикс формируется и выводится с помощью системного компонента bitrix:system.pagenavigation . Компонент разработан для использования совместно с другими компонентами и тесно связан с ними. Посмотрим, как можно использовать этот компонент для постраничного вывода списка элементов инфоблока.
Содержание
- Системный компонент bitrix:system.pagenavigation
- Метод CDBResult::GetPageNavString()
- Метод CDBResult::NavStart()
- Постраничная навигация в компонентах
- Свой шаблон постраничной навигации
- Битрикс API — разбиваем элементы для AJAX и других скриптов
- автор: Dmitriy
Системный компонент bitrix:system.pagenavigation
Шаблон .default откровенно кошмарный, так что есть смысл использовать modern или round :
Метод CDBResult::GetPageNavString()
Можно упростить наш код, используя метод GetPageNavString класса CDBResult :
Как нетрудно догадаться, внутри метода GetPageNavString() идет подключение системного компонента bitrix:system.pagenavigation и весь вывод компонента записывается в буфер. В предыдущем примере мы делали это сами, а теперь просто вызываем метод GetPageNavString() .
Метод CDBResult::NavStart()
Это устаревший способ организации постраничной навигации, использовать его не рекомендуется. Для начала выбираем все элементы инфоблока, попадающие под условия выборки, без постраничной навигации:
Теперь добавим постраничную навигацию с помощью CAllDBResult::NavStart() :
Метод разбивает результат выборки на страницы. После вызова этого метода, методы
- CDBResult::Fetch()
- CDBResult::GetNext()
- CDBResult::ExtractFields()
- CDBResult::NavNext()
будут ограничены только текущей страницей (а не всей выборкой).
Постраничная навигация в компонентах
Добавить параметры постраничной навигации на страницу настройки компонента:
Постраничная навигация в коде компонента:
Свой шаблон постраничной навигации
Чтобы кастомизировать постраничную навигацию, надо скопировать один из шаблонов системного компонента system.pagenavigation . Все содержимое папки modern копируем в папку pager :
Удаляем файл стилей style.min.css и создаем файл .description.php :
И теперь нам надо отредактировать файл template.php . Распечатаем массив $arResult с помощью функции print_r() :
В нашем случае показывается список из 11 статей, по две статьи на страницу. Всего получается 6 страниц, но на последней странице только одна статья.
- NavShowAlways — всегда показывать постраничную навигацию
- NavTitle — название списка элементов, например «Статьи» или «Новости»
- NavRecordCount — общее количество статей (записей)
- NavPageCount — общее количество страниц
- NavPageNomer — номер текущей страницы
- NavPageSize — количество статей на одну страницу
- bShowAll — разрешено или нет показывать ссылку «Все статьи»
- NavShowAll — равен true , если показываются все статьи, без постраничной навигации
- NavNum — номер постраничной навигации ( PAGEN_1 , PAGEN_2 , …)
- bDescPageNumbering — использовать или нет обратную постраничную навигацию
- nPageWindow — количество страниц, которые отображаются в постраничной навигации
- bSavePage — равна true если в главном модуле отмечена опция «Запоминать последнюю открытую страницу»
- sUrlPath — путь к странице относительно корня
- NavQueryString — строка GET-параметров
- nStartPage — номер первой страницы слева для текущей страницы
- nEndPage — номер первой страница справа для текущей страницы
- NavFirstRecordShow — порядковый номер первой статьи на текущей странице
- NavLastRecordShow — порядковый номер последней статьи на текущей странице
По поводу переменной bSavePage :
По поводу переменных nStartPage и nEndPage . Если текущая страница — третья ( NavPageNomer=3 ), а показывается пять ссылок ( nPageWindow=5 ), тогда nStartPage=1 , а nEndPage=5 :
Если текущая страница — четвертая ( NavPageNomer=4 ), а показывается пять ссылок ( nPageWindow=5 ), тогда nStartPage=2 , а nEndPage=6 :
В системе Bitrix постраничная навигация реализована с помощью компонента system.pagenavigation. Постраничная навигация используется в различных компонентах при выводе каталога, новостной ленты, статей и прочей информации.
Рассмотрим пример вызова постраничной навигации из компонента посредством метода CMain::GetPageNavStringEx, реализованным в возвращаемым методом CIBlockElement::GetList объекте типа CIBlockResult.
Пример из компонентов 2.0:
Таким образом, переменной $arResult[«NAV_STRING»] будет присвоен результат работы компонента bitrix:system.pagenavigation, с шаблоном $arParams[«PAGER_TEMPLATE»]. Если переменная $arParams[«PAGER_TEMPLATE»] пуста, то имя по умолчанию имя шаблона равно .default.
Теперь зададим кол-во выводимых кнопок-страниц постраничной навигации. Для этого перед вызовом метода GetPageNavStringEx (см. пример выше) надо задать свойство nPageWindow:
После чего кол-во будет равным значению, которое вы указали.
Данный код поможет понять как разбить элементы инфоблока по разным страницам.
Битрикс API — разбиваем элементы для AJAX и других скриптов
Рассмотрим код который нам нужно указать как 4-ый параметр.
и разберем каждый:
nTopCount — ограничивает количество (можно не указывать, можно задать как false на всякий случай)
nPageSize — количество элементов на странице
iNumPage — текущая страница
checkOutOfRange — а вот теперь самое интересное Этого параметра вы не найдете в документации на сайте битрикс (на момент написания статьи). НО — без него ваш цикл будет крутиться бесконечно долго, даже когда «страницы» закончаться.
При помощи этого можно делать — аякс загрузку «показать еще», последовательный проход по всем элементам, вывод товаров на разных страницах и много чего другого. И всё это без всяких if, else, break, continue и т.д.
автор: Dmitriy
Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.
Какие услуги предоставляю:
— Создание сайтов, шаблонов и компонентов на 1С-Битрикс;
— Разработка функционала с нуля и доработка кода на уже созданных проектах;
— Адаптивная вёрстка макетов и натяжка на Битрикс;
— Парсинг файлов и выгрузка на сайт (форматы — CSV, XML, XLSX, JSON)
— Интеграции со сторонними сервисами по API;
— Многоязычные версии и многое другое.
Источник: