Постраничная навигация в компонентах Битрикс: удобный шаблон ссылок
Разбор задачи
Многие, наверное, замечали неудобство стандартного шаблона постраничной навигации в 1С-Битрикс:
Создать собственную постраничную навигацию в 1С-Битрикс совсем не сложно. Для этого необходимо создать шаблон компонента постраничной навигации в папке вашей темы. Необходимо перейти в раздел /bitrix/templates/Ваш_шаблон/components/bitrix/ и создать там папку с названием system.pagenavigation. В ней необходимо создать папку с названием шаблона, например, keengo_pagenavigation и внутри файл с названием template.php. Код этого файла должен выглядеть следующим образом (см.ниже).
Затем нужно перейти в параметры компонента, для которого вы хотите применить новый шаблон постраничной навигации и перейти в раздел «Настройки постраничной навигации», затем выбрать из выпадающего списка название шаблона или вписать его в поле:
Теперь наша постраничная навигация выглядит симпотично и можно добавлять стили, чтобы получилось что-то вроде этого:
Советы по стилю
Классы в примере носят смысловые имена: их проще переименовать под вашу методологию (БЭМ, утилиты), не ломая PHP-ветвление по NavPageNomer.
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
if(!$arResult["NavShowAlways"]) {
if ($arResult["NavRecordCount"] == 0 || ($arResult["NavPageCount"] == 1 && $arResult["NavShowAll"] == false))
return;
}
$strNavQueryString = ($arResult["NavQueryString"] != "" ? $arResult["NavQueryString"]."&" : "");
$strNavQueryStringFull = ($arResult["NavQueryString"] != "" ? "?".$arResult["NavQueryString"] : "");
?>
<div class="pagination">
<?if ($arResult["NavPageNomer"] > 1) {?>
<a class="paginationPrevNext" href="<?=$arResult["sUrlPath"]?><?=$strNavQueryStringFull?>">Начало</a>
<?if ($arResult["NavPageNomer"] > 2) {?>
<a class="paginationPrevNext" href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=($arResult["NavPageNomer"]-1)?>">Предыдущая</a>
<?} else {?>
<a class="paginationPrevNext" href="<?=$arResult["sUrlPath"]?><?=$strNavQueryStringFull?>">Предыдущая</a>
<?}?>
<?} else { // Если страница первая?>
<span class="paginationPrevNext">Начало</span>
<span class="paginationPrevNext">Предыдущая</span>
<?}?>
<?$page = $arResult["nStartPage"]?>
<?while($page <= $arResult["nEndPage"]) {?>
<?if ($page == $arResult["NavPageNomer"]) {?>
<span class="paginationCurrent"><?=$page?></span>
<?} else {?>
<a class="paginationPage" href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=$page?>"><?=$page?></a>
<?}?>
<?$page++?>
<?}?>
<?if($arResult["NavPageNomer"] < $arResult["NavPageCount"]) {?>
<a class="paginationPrevNext" href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=($arResult["NavPageNomer"]+1)?>">Следующая</a>
<a class="paginationPrevNext" href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=$arResult["NavPageCount"]?>">Конец</a>
<?} else { // Если страница последняя ?>
<span class="paginationPrevNext">Следующая</span>
<span class="paginationPrevNext">Конец</span>
<?}?>
</div>Замечания перед выкладкой
Правки через контролируемую среду и с версионированием. Для статей-бэкенда проверяйте включённые модули и права; для чистых CSS-сниппетов — консоль браузера и отсутствие конфликтов с утилитарными классами основного шаблона проекта на Битрикс.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии