Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Постраничная навигация в списке разделов Битрикс- catalog.section.list

Просмотров: 8659

Если в магазине очень много разделов и хочется вывести их с постраничной навигацией: можно воспользоваться методами CDBResult::IsNavPrint(), CDBResult::NavStart и CDBResult::NavPrint

CDBResult::IsNavPrint()

Метод возвращает false, если все записи умещаются в одну страницу. В противном случае true. Он поможет нам ограничить колличество выводимых разделов на одной странице.

CDBResult::NavStart и CDBResult::NavPrint

Метод CDBResult::NavPrint выводит ссылки для постраничной навигации. Перед использованием данного метода необходимо вызвать метод NavStart. С помощью этих методов выведем, собственно, постраничную навигацию в catalog.section.list

Реализуем навигацию в catalog.section.list

Итак: Имеем некий интернет-магазин, в каталоге которого есть разделы с большим количеством подразделов. В моем случае, может доходить до 100-а подразделов, в каждом разделе. Кроме того, на сайте выводится не просто список подразделов: Картинка, Название, Пользовательское поле UF_ (в моем случае страна, но это не принципиально)

В итоге, если выводить на страницу все 100 разделов- страница получается невообразимо длинной. Нужно ограничить количество подразделов по 20 на страницу и добавить постраничную навигацию по остальным.

Всю работу выполняем со стандартным шаблоном списка разделов (catalog.section.list), внутри комплексного шаблона каталога. Хотя, само собой, можно проделывать это и не в комплексном шаблоне.

Просто в template.php вставляем этот код:


<?
  $rs = new CDBResult;
  $rs->InitFromArray($arResult['SECTIONS']);
  $rs->NavStart(20);
  if($rs->IsNavPrint())
    {
      while ($arSection = $rs->Fetch()):
      $db_list = CIBlockSection::GetList(Array($by=>$order),
      $arFilter = Array("IBLOCK_ID"=>$arSection["IBLOCK_ID"], "ID"=>$arSection["ID"]), true, $arSelect=Array("UF_STRANA"));
      while($ar_result = $db_list->GetNext()){
      $sectCountry = $ar_result['UF_STRANA'];
    }
?>
  <li>
  <a href="<?= $arSection["SECTION_PAGE_URL"] ?>">
  <img src="<?= $arSection['PICTURE']['SRC'] ?>">
  <?= $arSection['NAME'] ?>
  <?= $sectCountry; ?>
  </a>
  </li>
  <?
endwhile;
$rs->NavPrint("Подразделы", false, "pn_text", "/local/templates/navp.php");
}?>

До цикла while

  • Подключили класс CDBResult - для работы с постраничной навигацией
  • Использовали метод InitFromArray для заполнения массива (в нашем случае, количеством разделов)
  • Вызвали метод NavStart - в котором указали количество разделов, которое хотим выводить на одной странице
  • Методом IsNavPrint - определяем, помещается ли количество разделов на одну страницу (меньше ли 20-ти)

В самом цикле, просто получили пользовательское поле UF_STRANA и завернули в ссылку на раздел все нужные данные: картинку, название и название страны (в моем случае).

После цикла while, собственно, вывели постраничную навигацию. Метод NavPrint имеет следующие параметры:

  • title Названия выводимых элементов.
  • show_always Если "false", то метод не будет выводить навигационные ссылки если все записи умещаются на одну страницу. Если "true", то ссылки для постраничной навигации будут выводиться всегда. По умолчанию - "false".
  • StyleText CSS класс шрифта для вывода навигационных ссылок. Необязательный.
  • template_path Путь к шаблону показа навигационных ссылок. Если "false", то используется шаблон по умолчанию.

По сути, самый главный параметр в NavPrint - это последний, указание пути к шаблону с навигацией. Можете указать false- если устраивает стандартный шаблон. Но, можете указать полный путь к своему шаблону. В моем примере, этот шаблон лежит по пути "/local/templates/navp.php"

В общем-то и все. Если есть вопросы или дополнения к данной заметке, можно писать в комментариях.

Sky 10.11.2019
Михаил,большое спасибо за метод! Все работает! Небольшие два вопроса:
1.Как использовать стандартную пагинацию скажем "round" шаблон?
2.Как разметить ее над списком, а если возможно и под ним тоже ?

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Показать только один тип цены в каталоге Битрикс Просмотров: 13715 Достаточно часто, при создании сайта на битрикс, можно столкнуться с такой проблемой: на с... Адаптивное гамбургер меню для битрикс Просмотров: 14424 Заметка коротенькая, но решил оставить ее - так как самому часто нужно нечто подобное. В а... Фиксированная корзина с обновлением, без перезагрузки страницы. Просмотров: 17481 Иногда нужно сделать так, чтобы корзина в интернет магазине, созданном на Битрикс, была по... Заполнить картинки разделов каталога из картинок товаров Просмотров: 324 Задача: в каталоге, разделы и подразделы выводятся в виде плитки над товарами, с картинкам... Не дать пользователю купить больше одного товара, в Битрикс Просмотров: 5126 Иногда нужно и такое: Например: на одном из разрабатываемых сайтов, мне нужно было создать... Самодельная форма добавления элемента на API Битрикс Просмотров: 42447 Компонент iblock.element.add.form написан таким образом, что вы не сможете (не попотев изр... Индивидуальные цены в 1С-Битрикс: в каталоге и при оформлении заказа Просмотров: 4908 В этой заметке постараюсь описать процесс реализации индивидуальных цен, для пользователей... Если пользователь авторизован то... API Битрикс Просмотров: 22204 Достаточно часто, при создании сайта на битрикс нужно вывести в шаблон или компонент, неку... Пункты меню из разделов инфоблока Битрикс Просмотров: 90591 В принципе это стандартная возможность системы управления битрикс, но почему-то часто спра... Сортировать товары по названию, цене и дате поступления в каталоге Би... Просмотров: 39342 Достаточно часто заказчик просит вывести сортировку по цене, новым поступлениям и названию... Установить цену товара из свойства инфоблока Просмотров: 8674 На одном из проектов, нужно было единоразово заполнить цены товаров из свойства инфоблока... Показ страницы сайта в боковом слайдере, на примере всплывающей формы... Просмотров: 1830 Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битри... Объединить отдельные поля ФИО в одно свойство при оформлении заказа. Просмотров: 855 Пользователь, при оформлении заказа, заполняет три отдельных поля с фамилией, именем и отч... Отключить поиск по описаниям товаров в Битрикс Просмотров: 10581 Иногда, нужно отключить поиск по описаниям анонсов и детальному описанию товаров, при разр... Сгенерировать скидочные купоны, при заказе и отправить на почту Просмотров: 744 Задача: после того как пользователь сделал заказ, нужно сгенерировать одноразовые купоны д... Получить все товары из всех заказов пользователя. История купленных т... Просмотров: 1344 Задача: нужно создать раздел, в персональном разделе пользователя, с историей всех купленн... Вывести артикул в печатную форму бланка заказа Просмотров: 350 Задача: в печатную форму бланка заказа добавить артикулы товаров и данные о пользователе. ... Установить остатки товара на складе из доступных остатков. Просмотров: 4844 Задача, заполнить остатки товаров, в 1С-Битрикс, из параметра "Доступное количество". Картинка торгового предложения вместо иконки цвета, в выборе SKU Просмотров: 252 Задача: вместо не информативных иконок цветов нужно вывести детальную картинку торгового п... Использование WebP изображений в 1С-Битрикс (на Битрикс: Веб окружени... Просмотров: 25829 WebP это современный формат сжатия изображений, который позволяет, при правильных настройк...