G
N
I
D
A
O
L

Если в магазине очень много разделов и хочется вывести их с постраничной навигацией: можно воспользоваться методами 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"

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