Постраничный вывод на 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 — Начальная позиция, используется только в запросе к базе данных.
Вот и все! Универсальный постраничный вывод готов ;).
8 августа, 2011 в 11:21|date at time
Полезный опыт
21 сентября, 2011 в 18:42|date at time
Данная функция уже претерпела много изменений. Но Вы правы, для базы — это полезный опыт.