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

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&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 реализован на этом сайте, а так же на некоторых моих других сайтах.