Открыть меню    

Скрипт постраничной навигации на PHP

постраничная навигация PHP Данный скрипт позволит вывести не только стрелки на «предыдущую страницу» и «следующие страницу», как в статье «постраничная навигация на 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.

Комментарии к статье