<MyRusakov.ru />

Профессия Web-разработчик

Профессия Web-разработчик

Этот комплект за 8 месяцев превратит Вас в Web-разработчика с нуля. Учиться достаточно 1 час в день.

Начнёте Вы с HTML, CSS и вёрстки сайтов. Потом перейдёте к программированию и JavaScript. Затем изучите PHP, MySQL, SQL, Python. Изучите Web-фреймворки Laravel и Django. Создадите 5 своих сайтов для портфолио.

Комплект содержит:

- 540 видеоуроков

- 110 часов видео

- 1205 заданий для закрепления материала из уроков

- 5 финальных тестов

- 7 сертификатов

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Pagination на PHP

Pagination на PHP

Когда-то я писал статью про создание навигации по страницам. В этой статье я рассказывал, как получить набор данных из таблицы БД, соответствующей выбранной пользователем странице. В этой же статье мы разберём вывод Pagination на PHP. Pagination - это список самих страниц. В Интернете есть различные варианты, но все они страдают одним - огромное количество кода для создания бесконечного числа вариантов. Но Вам разве нужна бесконечность? Вам нужен только 1 вариант, который и будет стоять на сайте. В этой статье мы с Вами создадим относительно сложный pagination, но при этом кода будет совсем не много.

Чтобы создать Pagination на PHP, нам необходимо иметь на входе несколько параметров:

  • count_pages - количество страниц.
  • active - текущая активная страница.
  • count_show_pages - количество отображаемых страниц. Например, если будет 1000 страниц, то вывести их все весьма проблемно. Поэтому отображаться будет только заданное количество в этом параметре.
  • url - адрес страницы, для которой и создаётся Pagination.
  • url_page - адрес страницы с параметром page без значения на конце. Например, "/abc.php?func=create&amp;page=".

Теперь мы можем создавать Pagination, вот так это выглядит на PHP:

<?php
  /* Входные параметры */
  $count_pages = 50;
  $active = 15;
  $count_show_pages = 10;
  $url = "/index.php";
  $url_page = "/index.php?page=";
  if ($count_pages > 1) { // Всё это только если количество страниц больше 1
    /* Дальше идёт вычисление первой выводимой страницы и последней (чтобы текущая страница была где-то посредине, если это возможно, и чтобы общая сумма выводимых страниц была равна count_show_pages, либо меньше, если количество страниц недостаточно) */
    $left = $active - 1;
    $right = $count_pages - $active;
    if ($left < floor($count_show_pages / 2)) $start = 1;
    else $start = $active - floor($count_show_pages / 2);
    $end = $start + $count_show_pages - 1;
    if ($end > $count_pages) {
      $start -= ($end - $count_pages);
      $end = $count_pages;
      if ($start < 1) $start = 1;
    }
?>
  <!-- Дальше идёт вывод Pagination -->
  <div id="pagination">
    <span>Страницы: </span>
    <?php if ($active != 1) { ?>
      <a href="<?=$url?>" title="Первая страница">&lt;&lt;&lt;</a>
      <a href="<?php if ($active == 2) { ?><?=$url?><?php } else { ?><?=$url_page.($active - 1)?><?php } ?>" title="Предыдущая страница">&lt;</a>
    <?php } ?>
    <?php for ($i = $start; $i <= $end; $i++) { ?>
      <?php if ($i == $active) { ?><span><?=$i?></span><?php } else { ?><a href="<?php if ($i == 1) { ?><?=$url?><?php } else { ?><?=$url_page.$i?><?php } ?>"><?=$i?></a><?php } ?>
    <?php } ?>
    <?php if ($active != $count_pages) { ?>
      <a href="<?=$url_page.($active + 1)?>" title="Следующая страница">&gt;</a>
      <a href="<?=$url_page.$count_pages?>" title="Последняя страница">&gt;&gt;&gt;</a>
    <?php } ?>
  </div>
<?php } ?>

Сразу скажу, что кода хоть и немного, но он достаточно сложный для новичков. Года 3 назад я потратил очень много времени, чтобы сделать нечто подобное и тогда кода получилось раза в 2 больше.

А дальше можно этот Pagination через CSS украшать так, как Вы пожелаете. Можно и вёрстку изменить при желании (например, вместо угловых скобок "Предыдущая страница" и аналогичных поставить красивые картинки), главное, не трогать PHP-код.

Вот такой весьма удобный Pagination реализован на этом сайте, а так же на некоторых моих других сайтах.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (25):

Grey Grey 12.11.2013 16:49:54

а скрипт вообше рабочий? нажимал на разные ссылки активной остатся 15 сераница

Ответить

area_69 area_69 12.11.2013 18:21:42

А к БД подключался??

Ответить

Grey Grey 12.11.2013 18:28:54

а причем тут бд?

Ответить

area_69 area_69 12.11.2013 21:37:50

в первом предложении по ссылке пройди...

Ответить

Admin Admin 12.11.2013 21:32:12

Данный скрипт лишь генерирует pagination на основе входных параметров. Никакого вывода контента тут нет и быть не может. По сути, данная статья - это продолжение той, о которой было сказано в первом предложении.

Ответить

Grey Grey 12.11.2013 21:59:50

про контент понятно. не понятно то что при нажатии на ссылку на другую страницу например: 10 стр. Почему активной остается 15 стр.

Ответить

Admin Admin 13.11.2013 11:57:31

Потому что $active = 15;

Ответить

prog prog 14.11.2013 19:52:02

Здраствуйте, Михаил.У меня такая проблема не могу вывести постраничную навигацию.Как можно вывести такой код foreach($news as $item):?> <a href="index.php?view=news&t=<?=$item['title_url'];?>"><img src="userfiles/news/<?=$item['img'];?>" alt="<?=$item['title'];?>" width="200" height="120" /></a> <?endforeach;}?>

Ответить

Admin Admin 14.11.2013 21:15:46

foreach($news as $item) { ?> а в конце <?php } ?> - лучше так делать, вместо endforeach.

Ответить

Lerd Lerd 15.11.2013 21:18:15

Спасибо огромное за данную статью! Долго время хотел сделать себе хороший Pagination. Собственный занимал в 5 раз больше места и был неудобен.

Ответить

prog prog 27.11.2013 09:00:50

Здраствуйте.Я сделал постраничную навигацию, но у меня ошибки появляется Warning: Missing argument 3 for select_data(), как это исправить.

Ответить

tikkiwiki tikkiwiki 27.11.2013 10:19:47

Абай Калдыбаев, в службу поддержки пишите.

Ответить

CALIJKA CALIJKA 02.12.2013 17:00:15

Здравствуйте! Скажите, пожалуйста, как задать и обратиться к $active, имея движок описанный в курсе php и mysql. там функция getPagination создает список ссылок, не пойму как определить ссылку активной.

Ответить

tikkiwiki tikkiwiki 02.12.2013 19:50:56

Здравствуйте, Александр. для обращения используйте "$this->" Пример: $this->name - вызывает переменную "name", объявленную и используемую внутри класса.

Ответить

CALIJKA CALIJKA 03.12.2013 17:04:03

Я не могу понять, как мы получаем переменную $active, откуда её вытаскивать? Допустим мы находимся на второй странице ($active = 2 в данный момент), переходим на четвертую страницу (мы должны сделать $active = 4 и т.д.)

Ответить

tikkiwiki tikkiwiki 04.12.2013 10:39:05

Все верно, Александр. В active попадает наша активная страница на данный момент. Каким способом ее вытаскивать, решать Вам.

Ответить

CALIJKA CALIJKA 04.12.2013 22:16:10

вот я и хотел узнать хотя бы один способ...

Ответить

(Алекс) (Алекс) 23.08.2014 00:59:51

можно через get-параметр

Ответить

serega_seregin serega_seregin 11.01.2014 11:39:23

Добрый день. Хотелось бы узнать, для чего мы инициализируем перем. right, если дальше мы ее не пользуем?

Ответить

ashab ashab 01.03.2017 21:45:40

Здравствуйте Михаил! Может вам добавить немного кода чтобы кнопка Предыдущая страница не была если текущая страница равна 1. В смысли в вашем коде когда active = 1 то вы даете ссылку на страницу index.php!

Ответить

krater krater 24.10.2017 15:20:29

$active = ($_GET['page']) ? $_GET['page'] : 1; вставляеш вместо $active = 15

Ответить

Lusine_Alya Lusine_Alya 05.05.2017 20:30:09

Здраствуйте. Большое спасибо за код! Подскажите пожалуйста а как сделать так чтобы ссылки на страницы выводились групками. По три цифры. То есть прям вот так 123 ... 10 11 12 ... 19 20 21 ... > последняя? А то страниц много, хочется выводить с вот такими диапазонами.

Ответить

phpDeveloper phpDeveloper 11.05.2017 14:43:02

Дякую за код. Все працює. Ломав голову щоб писати своє, але виручили. Ще раз дякую.

Ответить

raffail raffail 20.05.2020 09:37:54

Код из статьи на какой странице должен быть? Index если то у меня ошибка 500 выдаёт.

Ответить

bigvax bigvax 25.08.2020 02:52:09

Кстати, в коде: Переменная $right - определена, но нигде не используется. Соответственно, можно безболезненно выкинуть. Ибо, дальше определяется параметр $end, вполне достаточный для алгоритма...

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.