Сделал свою пагинацию на битриксе. Получилось вот так.
Минусы:
- Код некачественный. Если есть идеи по оптимизации, пишите в комментариях, поправлю.
- Игнорирует пагинацию в “обратном порядке”. Не увидел смысла в ней, поэтому отказался.
Тут можно изменять только один параметр:
$countPagesDisplay
- это количество отображаемых страничек снизу (помимо первой, последней, стрелок и “…”).
Выглядит вот так:
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
if(!$arResult["NavShowAlways"])
{
if ($arResult["NavRecordCount"] == 0 || ($arResult["NavPageCount"] == 1 && $arResult["NavShowAll"] == false))
return;
}
// begin zadavaemie parametri
$countPagesDisplay = 3; // kolichestvo otobrajaemih stranic v paginacii
// end zadavaemie parametri
function addLeftBorder($lb) {
if ($lb > 1) {
$lb = $lb - 1;
}
return $lb;
}
function addRightBorder($rb,$max) {
if ($rb < $max) {
$rb = $rb + 1;
}
return $rb;
}
$i = 1;
$left_border = $arResult["NavPageNomer"];
$right_border = $arResult["NavPageNomer"];
$max = $arResult["NavPageCount"];
while($i < $countPagesDisplay) {
if($i % 2 == 0) {
$lb = $left_border;
$left_border = addLeftBorder($left_border);
if ($left_border == $lb) {
$rb = $right_border;
$right_border = addRightBorder($right_border, $max);
if ($right_border == $rb) {
$i = $countPagesDisplay;
}
}
} else {
$rb = $right_border;
$right_border = addRightBorder($right_border, $max);
if ($right_border == $rb) {
$lb = $left_border;
$left_border = addLeftBorder($left_border);
if ($left_border == $lb) {
$i = $countPagesDisplay;
}
}
}
$i++;
}
$arResult["nStartPage"] = $left_border;
$arResult["nEndPage"] = $right_border;
//echo "<pre>"; print_r($arResult);echo "</pre>";
$strNavQueryString = ($arResult["NavQueryString"] != "" ? $arResult["NavQueryString"]."&" : "");
$strNavQueryStringFull = ($arResult["NavQueryString"] != "" ? "?".$arResult["NavQueryString"] : "");
?>
<div class="paginator">
<font class="text">
<?if ($arResult["NavPageNomer"] > 1):?>
<?if($arResult["bSavePage"]):?>
<a href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=($arResult["NavPageNomer"]-1)?>">←</a>
<a href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=1">1</a>
<?else:?>
<?if ($arResult["NavPageNomer"] > 2):?>
<a href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=($arResult["NavPageNomer"]-1)?>">←</a>
<?else:?>
<a href="<?=$arResult["sUrlPath"]?><?=$strNavQueryStringFull?>">←</a>
<?endif?>
<?if ($arResult["nStartPage"] != 1):?>
<a href="<?=$arResult["sUrlPath"]?><?=$strNavQueryStringFull?>">1</a>
<?endif?>
<?endif?>
<?else:?>
←
<?endif?>
<?if ($arResult["nStartPage"] > 2):?>
<a href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=($arResult["nStartPage"]-1)?>">...</a>
<?endif?>
<?while($arResult["nStartPage"] <= $arResult["nEndPage"]):?>
<?if ($arResult["nStartPage"] == $arResult["NavPageNomer"]):?>
<span><?=$arResult["nStartPage"]?></span>
<?elseif($arResult["nStartPage"] == 1 && $arResult["bSavePage"] == false):?>
<a href="<?=$arResult["sUrlPath"]?><?=$strNavQueryStringFull?>"><?=$arResult["nStartPage"]?></a>
<?else:?>
<a href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=$arResult["nStartPage"]?>"><?=$arResult["nStartPage"]?></a>
<?endif?>
<?$arResult["nStartPage"]++?>
<?endwhile?>
<?if ($arResult["nEndPage"] < ($arResult["NavPageCount"] - 1)):?>
<a href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=($arResult["nEndPage"]+1)?>">...</a>
<?endif?>
<?if($arResult["NavPageNomer"] < $arResult["NavPageCount"]):?>
<?if($arResult["nEndPage"] < $arResult["NavPageCount"]):?>
<a href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=$arResult["NavPageCount"]?>"><?=$arResult["NavPageCount"]?></a>
<a href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=($arResult["NavPageNomer"]+1)?>">→</a>
<?else:?>
<a href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=($arResult["NavPageNomer"]+1)?>">→</a>
<?endif?>
<?else:?>
→
<?endif?>
</div>