Задать вопрос

Как сделать красивую пагинацию?

Подскажите плиз примерный алгоритм, как можно скрыть большой количество страниц?
Нужно примерно так: 1,2,3,4,5 ........ 97,98,99
etSMz7sX.png

сейчас у меня что-то типа этого:
public function getPosts($page = 1) {
        $shift = ($page-1) * POSTS_ON_PAGE;
        $result = db::select("select  * from posts
   limit $shift , ".POSTS_ON_PAGE);
}
  • Вопрос задан
  • 258 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@VSKut
Выводим:
1) Страница #1
2) Страница #текущая - 10
3) Страница #текущая - 1
4) Текущая страница
5) Страница #текущая + 1
6) Страница #текущая + 10
7) Страница #последняя

А нужно выводить или не нужно 2 и 6 - нужно смотреть в зависимости от страницы (11 и более от начала/максимальной страницы)
Также 1,2,3 не выводим на первой и 5,6,7 на последней странице.

Ещё дополнительно советую глянуть на реализацию тут: forum.onliner.by/viewforum.php?f=11
Удобный есть 'скролл' при нажатии на текущую страницу
Ответ написан
Комментировать
65536
@65536
вот мой вариант ex.tmweb.ru/paginator

вот метод который выдает массив номеров страниц в зависимости от количества
private function getNumbers($pagesCount)
{
    $numbers = [];

    $rangeL = $this->page - $this->range - 1;

    if ($rangeL < 1) {
        $rangeL = 1;
    }

    $rangeR = $rangeL + $this->range * 2 + 1;

    if ($rangeR > $pagesCount) {
        $rangeR = $pagesCount;
        $rangeL = $pagesCount - $this->range * 2 + 1;

        if ($rangeL < 1) {
            $rangeL = 1;
        }
    }

    if ($rangeL > 1) {
        $numbers[] = 1;

        if ($rangeL > 2) {
            $rangeL++;

            $numbers[] = false;
        }
    }

    for ($i = $rangeL; $i <= $rangeR; $i++) {
        $numbers[] = $i;
    }

    if ($rangeR < $pagesCount) {
        if ($rangeR < $pagesCount - 2) {
            $numbers[] = false;
        } else {
            $numbers[] = $pagesCount - 1;
        }

        $numbers[] = $pagesCount;
    }

    return $numbers;
}


$this->page - номер текущей страницы (нумерация не с 0 а с 1)
$this->range - по сколько кнопок страниц показывать вокруг выбранной (в примере задано 4)

пропуски добавляются в него как false, при рендрежке потом можно заменить каким-то контролом или троеточием как в примере
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
посмотрите хабросайты, да хоть здесь, на тостере
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы