Устройство постраничной навигации
Постраничная навигация в Битрикс формируется и выводится с помощью системного компонента bitrix:system.pagenavigation
. Компонент разработан для использования совместно с другими компонентами и тесно связан с ними. Посмотрим, как можно использовать этот компонент для постраничного вывода списка элементов инфоблока.
Пример использования системного компонента bitrix:system.pagenavigation
:
<?
if (!CModule::IncludeModule('iblock')) {
ShowError('Модуль «Информационные блоки» не установлен');
}
// сортировка элементов
$arSort = array(
'SORT' => 'ASC'
);
// условия выборки элементов инфоблока
$arFilter = array(
'IBLOCK_ID' => 1 // идентификатор инфоблока
);
// постраничная навигация
$arNavParams = array(
'nPageSize' => 2, // количество элементов на странице
'bShowAll' => true, // показывать ссылку «Все элементы»?
);
// какие поля элементов инфоблока выбираем
$arSelect = array(
'ID',
'CODE',
'NAME',
'PREVIEW_TEXT',
);
// выполняем запрос к базе данных
$dbResult = CIBlockElement::GetList(
$arSort,
$arFilter,
false,
$arNavParams,
$arSelect
);
// начинаем буферизацию вывода
ob_start();
$APPLICATION->IncludeComponent(
'bitrix:system.pagenavigation',
'round',
array(
'NAV_TITLE' => 'Элементы', // поясняющий текст для постраничной навигации
'NAV_RESULT' => $dbResult, // результаты выборки из базы данных
'SHOW_ALWAYS' => false // показывать постраничную навигацию всегда?
)
);
// завершаем буферизацию вывода
$navString = ob_get_clean();
// переборка результатов выборки
while ($arElement = $dbResult->Fetch()) {
echo '<h2>'.$arElement['NAME'].'</h2>', PHP_EOL;
echo '<p>'.$arElement['PREVIEW_TEXT'].'</p>', PHP_EOL;
}
// выводим постраничную навигацию
echo $navString;
?>
Метод CDBResult::GetPageNavString()
Можно упростить наш код, используя метод GetPageNavString
класса CDBResult
:
<?
if (!CModule::IncludeModule('iblock')) {
ShowError('Модуль «Информационные блоки» не установлен');
}
// сортировка элементов
$arSort = array(
'SORT' => 'ASC'
);
// условия выборки элементов инфоблока
$arFilter = array(
'IBLOCK_ID' => 1 // идентификатор инфоблока
);
// постраничная навигация
$arNavParams = array(
'nPageSize' => 2, // количество элементов на странице
'bShowAll' => true, // показывать ссылку «Все элементы»?
);
// какие поля элементов инфоблока выбираем
$arSelect = array(
'ID',
'CODE',
'NAME',
'PREVIEW_TEXT',
);
// выполняем запрос к базе данных
$dbResult = CIBlockElement::GetList(
$arSort,
$arFilter,
false,
$arNavParams,
$arSelect
);
// html-код постраничной навигации
$navString = $dbResult->GetPageNavString(
'Элементы', // поясняющий текст
'round', // имя шаблона
false // показывать всегда?
);
// переборка результатов выборки
while ($arElement = $dbResult->Fetch()) {
echo '<h2>'.$arElement['NAME'].'</h2>', PHP_EOL;
echo '<p>'.$arElement['PREVIEW_TEXT'].'</p>', PHP_EOL;
}
// выводим постраничную навигацию
echo $navString;
?>
Как нетрудно догадаться, внутри метода GetPageNavString()
идет подключение системного компонента bitrix:system.pagenavigation
и весь вывод компонента записывается в буфер. В предыдущем примере мы делали это сами, а теперь просто вызываем метод GetPageNavString()
.