Когда-то я писал статью про создание навигации по страницам . В этом материале я рассказывал, как получить набор данных из таблицы БД, соответствующей выбранной пользователем странице. В этой же статье разберём вывод Pagination на PHP . Pagination - это список самих страниц. В Интернете есть различные варианты, но в...
Когда-то я писал статью про создание навигации по страницам. В этом материале я рассказывал, как получить набор данных из таблицы БД, соответствующей выбранной пользователем странице. В этой же статье разберём вывод 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="Первая страница"><<<</a>
<a href="<?php if ($active == 2) { ?><?=$url?><?php } else { ?><?=$url_page.($active - 1)?><?php } ?>" title="Предыдущая страница"><</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="Следующая страница">></a>
<a href="<?=$url_page.$count_pages?>" title="Последняя страница">>>></a>
<?php } ?>
</div>
<?php } ?>
Сразу скажу, что кода хоть и немного, но он достаточно сложный для новичков. Года 3 назад я потратил очень много времени, чтобы сделать нечто подобное и тогда кода получилось раза в 2 больше.
А дальше можно этот Pagination через CSS украшать так, как Вы пожелаете. Можно и вёрстку изменить при желании (например, вместо угловых скобок "Предыдущая страница" и аналогичных поставить красивые картинки), главное, не трогать PHP-код.
Вот такой весьма удобный Pagination реализован на этом сайте, а так же на некоторых моих других сайтах.
