Постраничный вывод на PHP

Наверное, каждый разработчик сталкивался с необходимостью постраничного вывода какой-либо информации на экран. Практически в каждом проекте всегда есть «что-то», что не помещается на одну страницу и его нужно вывести по частям, классическим примером может служить вывод информации в google.com. Все видели панель навигации внизу страницы. Как создать панель навигации для постраничного вывода информации, посвящена эта запись.

Ниже приведен скрипт как сделать постраничный как показано в примере.

|< … 122 123 124 125 126 127 128 129 130 131 132 … >|

Скрипт:

<?php
function yandex_link_bar($page, $count, $pages_count, $show_link)
{
// $show_link - это количество отображаемых ссылок;
// нагляднее будет, когда это число будет парное
// Если страница всего одна, то вообще ничего не выводим
if ($pages_count == 1) return false;
$sperator = ' '; // Разделитель ссылок; например, вставить "|" между ссылками
// Для придания ссылкам стиля
$style = 'style="color: #808000; text-decoration: none;"';
$begin = $page - intval($show_link / 2);
unset($show_dots); // На всякий случай :)
// Сам постраничный вывод
// Если количество отображ. ссылок больше кол. страниц
if ($pages_count <= $show_link + 1) $show_dots = 'no';
// Вывод ссылки на первую страницу
if (($begin > 2) && ($pages_count - $show_link > 2)) {
echo ' |<  ';
}
for ($j = 0; $j <= $show_link; $j++) // Основный цикл вывода ссылок
{
$i = $begin + $j; // Номер ссылки
// Если страница рядом с началом, то увеличить цикл для того,
// чтобы количество ссылок было постоянным
if ($i < 1) continue;
// Подобное находится в верхнем цикле
if (!isset($show_dots) && $begin > 1) {
echo ' ... ';
$show_dots = "no";
}
// Номер ссылки перевалил за возможное количество страниц
if ($i > $pages_count) break;
if ($i == $page) {
echo ' '.$i.' ';
} else {
echo ' '.$i.' ';
}
// Если номер ссылки не равен кол. страниц и это не последняя ссылка
if (($i != $pages_count) && ($j != $show_link)) echo $sperator;
// Вывод "..." в конце
if (($j == $show_link) && ($i < $pages_count)) {
echo ' ... ';
}
}
// Вывод ссылки на последнюю страницу
if ($begin + $show_link + 1 < $pages_count) {
echo '  >| ';
}
return true;
} // Конец функции

// Подключение к базе данных
mysql_connect('localhost', 'root', '') or die('error! Нет соединения с сервером mysql!');
mysql_select_db('data_base') or die('error! Нет соединения с базой данных!');

// Подготовка к постраничному выводу
$perpage = 10; // Количество отображаемых данных из БД
if (empty($_get['page']) || ($_get['page'] <= 0)) {
$page = 1;
} else {
$page = (int) $_get['page']; // Считывание текущей страницы
}
// Общее количество информации
$count = mysql_numrows(mysql_query('select * from table')) or die('error! Записей не найдено!');
$pages_count = ceil($count / $perpage); // Количество страниц
// Если номер страницы оказался больше количества страниц
if ($page > $pages_count) $page = $pages_count;
$start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД
// Вызов функции, для вывода ссылок на экран

yandex_link_bar($page, $count, $pages_count, 10);

// Вывод информации из базы данных
echo '

Постраничный вывод информации

'; $result = mysql_query('select * from table limit '.$start_pos.', '.$perpage) or die('error!'); while ($row = mysql_fetch_array($result)) { echo '

'.$row['some_field'].'

'; } ?>

Переменные, которые требуют подробного описания:

$page — Текущая страница, передается от скрипта к скрипту методом get.

$perpage — Количество отображаемых данных из базы данных, на примере yandex — это количество ссылок на сайты, отображаемых на одной странице.

$count — Общее количество информации, на примере yandex — это количество найденных сайтов по запросу.

$pages_count — Количество страниц, без комментариев.

$start_pos — Начальная позиция, используется только в запросе к базе данных.

Вот и все! Универсальный постраничный вывод готов ;).


2 комментария для “Постраничный вывод на PHP”

Оставьте комментарий