Скрипт постраничной навигации на PHP
Данный скрипт позволит вывести не только стрелки на «предыдущую страницу» и «следующие страницу», как в статье «постраничная навигация на PHP», но и, при желании, поможет вывести последовательный список ссылок на все страницы сайта. Как это выглядит, вы можете увидеть на моем сайте – просто спуститесь вниз на главной странице сайта.
Посредством phpmyadmin (или sql) создайте таблицу (название на ваше усмотрение, я назвал opt
) с двумя полями. Первое поле назовите id
, второе str
. Оба поля должны иметь числовой тип (int
), полю id
назначьте auto_increment
. Данная таблица будет хранить числовое значение (в поле str
), определяющее число постов выводимых на одной странице.
Далее все просто. Делаем запрос и извлекаем это числовое значение, заносим его в переменную, например, $num
. Определяем общее число постов (сообщений) в базе данных, заносим это значение в переменную $posts
. Находим общее число страниц сайта ($total
) и округляем в меньшую сторону. Вычисляем, с какого поста необходимо выводить сообщения (посты) на данной странице ($start
). Делаем запрос к таблице с постами и ограничиваем по лимиту ($num
), также указываем параметр ($start
), с которого начнется вывод записей. Теперь остается соответствующим образом расположить ссылки на соответствующие страницы и, вуаля, постраничная навигация на PHP готова. Более подробное описание скрипта можно увидеть непосредственно в коде.
PHP
$result77 = mysql_query("SELECT str FROM opt", $db);
$myrow77 = mysql_fetch_array($result77);
// число постов на одной странице
$num = $myrow77["str"];
// Извлекаем из URL текущую страницу
@$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM posti");
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total = intval($total);
// округляем текущую страницу
$page = intval($page);
// Если переменная $page меньше 0 или пуста
// присваиваем $page 1
// А если значение $page выходит за $total,
// присваиваем $page значение переменной $total
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная с какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start
// -----МИНИ ПОСТЫ-----
$result = mysql_query("SELECT * FROM posti
ORDER BY date DESC LIMIT $start, $num ",$db);
PHP
//Выводим все посты в цикле
PHP
// Проверяем нужна ли стрелки назад
if ($page != 1) $pervpage =
'<a href='index.php?page=1'>Первая</a> <a href='index.php?page='. ($page - 1) .''>Предыдущая</a>';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage =
'<a href='index.php?page='. ($page + 1) .''>Следующая</a> <a href='index.php?page=' .$total. ''>Последняя</a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left =
' <a href='index.php?page='. ($page - 2) .''>'. ($page - 2) .'</a> ';
if($page - 1 > 0) $page1left =
'<a href='index.php?page='. ($page - 1) .''>'. ($page - 1) .'</a> ';
if($page + 2 <=$total) $page2right =
' <a href='index.php?page='. ($page + 2) .''>'. ($page + 2) .'</a>';
if($page + 1 <=$total) $page1right =
' <a href='index.php?page='. ($page + 1) .''>'. ($page + 1) .'</a>';
// выводим ссылки
echo $pervpage.$page2left.$page1left.'<span >'.$page.'</span>'.$page1right.$page2right.$nextpage;
Плюс данной навигации в том, что все страницы сайта можно расположить в пределах 3 кликов от главной страницы. Данная особенность может пригодиться, например, при работе с сервисом SAPE.
Комментарии к статье