Разбивка на страницы при выводе из базы MySQL


Скрипт разбивки на страницы информации из базы данных MySQL

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

$maxThread = 20;
// указываем сколько сообщений должно выводиться на одной странице

$db = mysql_connect($bdhost,$bdlogin,$bdpass) or die("Подключение к базе данных не состоялось!");
mysql_select_db($bdname,$db) or die("Не удалось выбрать базу данных!");
$result = mysql_query("SELECT * FROM 'table');
// <читаем> таблицу 'table'. Разумеется перед этим подключившись к базе данных, как мы и сделали

$totaltexts=@mysql_num_rows($result);
// подсчитываем общее количество полей в таблице 'table', чтобы определить сколько всего у нас будет сообщений

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

if( $totaltexts <= $maxThread ) $totalPages = 1;
elseif( $totaltexts % $maxThread == 0 ) $totalPages = $totaltexts / $maxThread;
else $totalPages = ceil( $totaltexts / $maxThread );
if( $totaltexts == 0 ) $threadStart = 0;
else $threadStart = $maxThread * $page - $maxThread + 1;
if( $page == $totalPages ) $threadEnd = $totaltexts;
else $threadEnd = $maxThread * $page;
$initialMsg = $maxThread * $page - $maxThread;
$pages = (int) (($totaltexts + $maxThread - 1) / $maxThread);
// вновь с помощью математических функций вычисляем общее число страниц $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

$result = mysql_query("SELECT text FROM 'table' LIMIT $initialMsg, $maxThread");
// снова делаем запрос к базе данных, но на этот раз мы уже ограничили количество записей числом $maxThread, которое в нашем примере равно 20. Запись с которой начинается запрос определяется здесь переменной $initialMsg, которая была рассчитана скриптом выше. Вы сами можете определять в каком порядке выводить записи - либо от новых к старым, либо от старых к новым. Для этого используйте команду ORDER BY в запросе к БД.

while ($myrow=mysql_fetch_array($result))
{
$text=$myrow["text"];
echo "$text<br>";
}
// А здесь уже обычное чтение полей базы данных и вывод их на экран.

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

В заключение, как уже было обещано, мы поговорим о том, как сделать вывод строки с номерами страниц более презентабельным. Мы ограничим вывод номеров соседних страниц двумя, а для доступа к следующим и предыдущим поставим ссылки <вперед>, <в начало>, <в конец>. То есть информация из 10 страниц при условии, что в данный момент мы на 5-й странице будет выглядеть в нашем выводе так:
Страница: <в начало> <3> <4> 5 <6> <7> <вперед> <в конец>
Пример подобной реализации можно увидеть в скрипте знакомств.

Сам скрипт будет точно такой же как предыдущий, но вместо вот этой части:

$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 = "Страницы: <a href=\"index.php?page=1\">в начало</a> ";
for ($k = 1; $k <= $pages; $k++) {
if (($k - $page) < 3 and ($k + 3) > $page)
{
if ($k != $page) {$line .= "<a href=\"index.php?page=$k\">$k</a>";}
if ($k == $page) {$line .= "$k";}
}
}
$ppg=$page+1;
if ($ppg <= $pages) {$line .= " <a href=\"index.php?page=$ppg\">Вперед</a>";}
$line .= " <a href=\"index.php?page=$pages\">в конец</a>";

Удачи в программировании!

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

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