Красивая пагинация на битриксе / bitrix pagination

Сделал свою пагинацию на битриксе. Получилось вот так.
Минусы:
- Код некачественный. Если есть идеи по оптимизации, пишите в комментариях, поправлю.
- Игнорирует пагинацию в “обратном порядке”. Не увидел смысла в ней, поэтому отказался.

Тут можно изменять только один параметр:
$countPagesDisplay - это количество отображаемых страничек снизу (помимо первой, последней, стрелок и “…”).

Выглядит вот так:

http://localhost:8001/media/uploads/2018/11/09/pagination.png

<?
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"]."&amp;" : "");
$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)?>">&larr;</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)?>">&larr;</a>
        <?else:?>
            <a href="<?=$arResult["sUrlPath"]?><?=$strNavQueryStringFull?>">&larr;</a>
        <?endif?>
        <?if ($arResult["nStartPage"] != 1):?>
            <a href="<?=$arResult["sUrlPath"]?><?=$strNavQueryStringFull?>">1</a>
        <?endif?>
    <?endif?>

<?else:?>
    &larr;&nbsp;
<?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)?>">&rarr;</a>
    <?else:?>
        <a href="<?=$arResult["sUrlPath"]?>?<?=$strNavQueryString?>PAGEN_<?=$arResult["NavNum"]?>=<?=($arResult["NavPageNomer"]+1)?>">&rarr;</a>
    <?endif?>
<?else:?>
    &nbsp;&rarr;
<?endif?>

</div>
bitrix