leni_m
@leni_m
ЧупаКобрус

Как сгруппировать номера страниц?

Вообщем сделал список, где отображаются пункты по x на странице.
пониже блок с самими страницами (1,2,3,4 и т.д.), но не могу додуматься как показывать не все страницы, а часть из них(например по 5) и стрелочки переключение по страницам(в конец, в начало и по 5 скажем)
Может кто подскажет реализацию или простенький плагин для этого?
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
Простенькая функция с лапшой внутри:
spoiler
public static function renderPaginator($total, $current, $indent = 3)
    { 
        $start = 1 + $indent;
        $end = $total - $indent;
        $mid_start = $current - $indent;
        $mid_end = $current + $indent;
        
        ?>
    
    <nav style="margin: 0 auto;">
        <ul class="pagination">
            <?
            
            $skip1 = ($current < $start || $current > $end);
            
            if ($current == 1) { // previous
                ?><li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li><?
            } else {
                ?><li><a href="?page=<?=($current-1)?>" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li><?
            }
            for ($p = 1; $p <= $total; $p++) { // each page
                if ($p == $current) {
                    ?>
                    <li class="active"><a href="#"><?=$p?> <span class="sr-only">(текущая)</a></li><?
                } else {
                    
                    if($p < $start
                    || ($p > $mid_start && $p < $mid_end)
                    || $p > $end
                    || ($p == $start && $p == $mid_start)
                    || ($p == $end && $p == $mid_end)
                    ) {
                    ?>
                    <li><a href="?page=<?=$p?>"><?=$p?></a></li><?
                    } elseif($p == $start || $p == $end) {
                    ?>
                    <li class="disabled"><a href="#">...</a></li><?
                    }
                }
            }
            if ($current == $total) { // next
                ?><li class="disabled"><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li><?
            } else {
                ?><li><a href="?page=<?=($current-1)?>" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li><?
            }
            ?>
  
        </ul>
    </nav>    
    <?
    }

На входе общее кол-во страниц, номер текущей страницы и, опционально, размер отступов.
При параметрах (100, 42, 3) выглядит как-то так:
1 -2 - 3 ... 39 - 40 - 41 - 42 - 43 -44 - 45 ... 98 - 99 -100
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы