Постраничная навигация с помощью PHP

paginatorДобрый вечер пользователи. Вы наверное часто встречали постраничную навигацию на сайтах. В данном уроке мы научимся делать такую постраничную навигацию.

Как обычно выкладываю демо-версию и исходные материалы данного урока. В демо-версии можете посмотреть постраничную навигацию, которую мы сейчас будем делать.

Для урока нам понадобится база данных, запущенный локальный сервер, скрипт навигации и ваше терпение.

Шаг 1. База данных

Первым делом нам нужно создать БД и пользователя. А также создать таблицу и заполнить ее информацией. В моем примере БД называется navigation, а таблица называется news.

Структуру таблицы смотрите на скриншоте ниже:

paginator-1

Таблица состоит из 3-х полей — id, title, text.

Шаг 2. Подключение к БД

Теперь нам нужно написать подключение к БД. Для этого я создал новый файл и назвал его cfg.php. В этом файле я написал следующий код:

<?

 $host = 'localhost';
 $user = 'testuser';
 $pswd = '123';
 $database = 'navigation';
 
 $connect = mysql_connect($host, $user, $pswd, $database);
 mysql_set_charset('utf8', $connect);
 
 if (!$connect || !mysql_select_db($database, $connect))

  {
	  exit(mysql_error());
  }

?>

В данном коде нет ничего сложного. Мы написали обычное подключение к БД и прописали условие, если вдруг что-то пойдет не так, то у нас выдаст ошибку. Также прописали кодировку БД — utf8.

Шаг 3. Вывод информации из БД

Теперь создадим файл и назовем его index.php. Это будет наш основной файл. В нем будут выводится записи и здесь же мы будем формировать постраничную навигацию. Не забудьте в файл index.php подключить файл cfg.php. Для этого где-нибудь в начале странице напишите такой код:

<?
include("cfg.php");
?>

Для того, чтобы вывести информацию из БД я написал в файле index.php вот такой код:

<?
$query = mysql_query("SELECT * FROM news");
			   
$array = mysql_fetch_array($query);
			   
 do
			   
  {
    echo $array["title"];
    echo "
"; echo $array["text"]; echo "

"; } while($array = mysql_fetch_array($query)); ?>

В этом коде тоже нет ничего не обычного. Мы выбрали всю информацию из таблицы news и вывели ее с помощью цикла do/while.

Шаг 4. Первая часть скрипта

Теперь, когда у нас выводится вся информация, можно уже воспользоваться первой частью скрипта. Для этого в файле index.php перед выборкой информации вставим код:

$num = 5;
$page = $_GET['page'];
$result00 = mysql_query("SELECT COUNT(*) FROM news");
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
$total = (($posts - 1) / $num) + 1;
$total =  intval($total);
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;

Данная строчка $num = 5; отвечает за количество статей на странице. Вместо цифры 5 можете поставить свое значение.
Также нужно немного изменить саму выборку информацию и добавить к ней следующее:

$query = mysql_query("SELECT * FROM news ORDER BY id LIMIT $start, $num");

Наш код теперь должен выглядеть так:

<?			 
$num = 3;
$page = $_GET['page'];
$result00 = mysql_query("SELECT COUNT(*) FROM news");
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
$total = (($posts - 1) / $num) + 1;
$total =  intval($total);
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;	
			 
$query = mysql_query("SELECT * FROM news ORDER BY id LIMIT $start, $num");
$array = mysql_fetch_array($query);
			   
do
			   
{
    echo $array["title"];
    echo "
"; echo $array["text"]; echo "

"; } while($array = mysql_fetch_array($query)); ?>

Шаг 5. Выводим навигацию

В этом шаге нам нужно вывести саму навигацию, которая будет иметь вид 1 | 2 | Следующая | Последняя. Для этого в файле index.php под предыдущем кодом открываем php-теги <?php ?> и пишем внутри них такой код:

<?
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = 'Первая | Предыдущая | ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' | Следующая | Последняя';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 5 > 0) $page5left = ' <a href=index.php?page='. ($page - 5) .'>'. ($page - 5) .' | ';
if($page - 4 > 0) $page4left = ' <a href=index.php?page='. ($page - 4) .'>'. ($page - 4) .' | ';
if($page - 3 > 0) $page3left = ' <a href=index.php?page='. ($page - 3) .'>'. ($page - 3) .' | ';
if($page - 2 > 0) $page2left = ' <a href=index.php?page='. ($page - 2) .'>'. ($page - 2) .' | ';
if($page - 1 > 0) $page1left = '<a href=index.php?page='. ($page - 1) .'>'. ($page - 1) .' | ';

if($page + 5 <= $total) $page5right = ' | <a href=index.php?page='. ($page + 5) .'>'. ($page + 5) .'';
if($page + 4 <= $total) $page4right = ' | <a href=index.php?page='. ($page + 4) .'>'. ($page + 4) .'';
if($page + 3 <= $total) $page3right = ' | <a href=index.php?page='. ($page + 3) .'>'. ($page + 3) .'';
if($page + 2 <= $total) $page2right = ' | <a href=index.php?page='. ($page + 2) .'>'. ($page + 2) .'';
if($page + 1 <= $total) $page1right = ' | <a href=index.php?page='. ($page + 1) .'>'. ($page + 1) .'';

// Вывод меню если страниц больше одной

if ($total > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "
"; echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.''.$page. ''.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage; echo "
"; } ?>

Шаг 6. Результат проделанной работы

Теперь можно все сохранить и проверить. В моем примере на страницы будут выводится по 5 записей.

На этом все, данный урок окончен. Спасибо за внимание!

Полный код всех страниц и код скрипта вы можете посмотреть в исходниках. Скачать исходники вы можете по ссылке в начале урока абсолютно бесплатно и без рекламы.

Урок для Вас подготовлен командой сайта www.red-star.pro.