Скрипт разбивки на страницы


Разбивка большого объема информации на отдельные страница - это не только ускорение загрузки страниц, но и необходимое средство создания удобного интерфейса на вашем сайте. В этой статьи мы на примере рассмотрим, как сделать разбивку на страницы с использованием не сложного скрипта. Сперва мы напишем скрипт, который читает информацию из какого-либо файла и выводит результат прочтения на экран с разбивкой на страницы. Затем мы рассмотрим скрипт постраничного вывода из базы данных MySQL. И в конце мы создадим еще один усовершенствованный скрипт на основе имеющегося. Итак, начнем.

Скрипт разбивки на страницы информации из текстового файла.

Допустим, что у нас есть текстовый файл anecdot.dat, в котором, как не сложно догадаться, записаны анекдоты. Каждый новый анекдот в этом файле начинается с новой строки. Здесь и далее знаком // отмечены комментарии к скрипту.

<?php
$messperpage = 20;
// указываем сколько сообщений, то есть в нашем случае анекдотов должно выводиться на странице

$file = "anecdot.dat";
// указываем имя файла с анекдотами

$text = file("$file");
// читаем файл

$messages = count($text);
// подсчитываем общее количество строк в файле, чтобы определить сколько всего у нас будет сообщений

if (!isset($page)) {$page = 1;}
// определяем текущую страницу. Если номер страницы еще не высчитывался и не указывался, то соответственно текущий номер страницы 1.

$numfrom = count($text) - ($messperpage * ($page - 1));
$numto = count($text) - ($messperpage * $page) + 1;
if ($numto < 1) {$numto = 1;}
$pages = (int) ((count($text) + $messperpage - 1) / $messperpage);
// далее уже идет сам скрипт разбивки на страницы, с помощью которого исходя из общего количества сообщений $messages и указанного нами числа сообщений на одной странице $messperpage мы рассчитываем общее число страниц $pages

$line = "|";
for ($k = 1; $k <= $pages; $k++) {
if ($k != $page) {$line .= "<a href=\"index.php?page=$k\"> $k </a>|";}
if ($k == $page) {$line .= " $k |";}
}
// с помощью цикла формируем список страниц со ссылками и заносим их в переменную $line, которую мы выведем на экран после наших анекдотов (можно и перед). Номер текущей страницы будет не активным, а остальные будут в виде ссылок

for ($i = $numfrom - 1 ; $i >= $numto - 1; $i--) {
echo "$text[$i]<br>";
}
// с помощью этого цикла мы выводим наши анекдоты на экран в количестве 20 анекдотов на странице. Следующая 20-ка на второй странице и так далее. Сперва выводятся самые последние записи из файла, то есть самая последняя строчка в файле будет самым первым анекдотом на первой странице.

echo "<center>$line</center>";
// ну и наконец выводим сами номера страниц со ссылками на следующие и предыдущие.

Недостаток данного скрипта в том, что он выводит все номера страниц в одну строку. То есть если у нас наберется допустим 100 страниц, то все их номера пользователь увидит внизу страницы, что не очень презентабельно. О том, как сделать ограниченный вывод, проставить ссылки «вперед», «в начало», «в конец» мы поговорим дальше.

©Невежин Евгений
http://nevius.ru
06.05.2007

При перепечатке информации ссылка на сайт http://nevius.ru обязательна.