(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Постраничная навигация на PHP

Источник: php
IT-студия SoftTime

Проблема реализации постраничной навигации часто встает перед начинающими PHP-программистами. К разбиению объёмного текста на отдельные страницы прибегают во многих Web-приложениях от гостевых книг и форумов до различных каталогов. Давайте 
решим эту проблему. 
Итак, что нам требуется для реализации постраничной навигации? Для примера возьмем гостевую книгу, содержащую несколько сотен сообщений, в которой требуется выводить на страницу Х сообщений.
Рассмотрим задачу более конкретно. Сообщения пользователей хранятся в базе данных post со следующей структурой:

 

  • id - номер сообщения,
  • text - тело сообщения,
  • name - имя автора,
  • time - время создания.

 

В итоге нам надо получить вывод Х сообщений на страницу, а также организовать удобную навигацию, например, такую: 

 

<< < ..2/3/<b>4</b>/5/6.. > >> 

 

где 4 - текущая станица. Для того чтобы отслеживать текущую страницу, будем использовать параметр  page , передаваемый через URL. К примеру: 

 

www.myserver.com/index.php?page=X. 

 

Здесь X - номер станицы (для примера, пусть Х будет равно 25).

 

Теперь, после этого небольшого введения, можно приступать к непосредственной реализации.

 

<?php 
// Устанавливаем соединение с базой данных 
include "config.php"; 
// Переменная хранит число сообщений выводимых на станице 
$num = 25; 
// Извлекаем из URL текущую страницу 
$page = $_GET['page']; 
// Определяем общее число сообщений в базе данных 
$result = mysql_query("SELECT COUNT(*) FROM post"); 
$posts = mysql_fetch_row($result); 
// Находим общее число страниц 
$total = intval(($posts - 1) / $num) + 1; 
// Определяем начало сообщений для текущей страницы 
$page = intval($page); 
// Если значение $page меньше единицы или отрицательно 
// переходим на первую страницу 
// А если слишком большое, то переходим на последнюю 
if(empty($page) or $page < 0) $page = 1; 
  if($page > $total) $page = $total; 
// Вычисляем начиная к какого номера 
// следует выводить сообщения 
$start = $page * $num - $num; 
// Выбираем $num сообщений начиная с номера $start 
$result = mysql_query("SELECT * FROM post LIMIT $start, $num"); 
// В цикле переносим результаты запроса в массив $postrow 
while ( $postrow[] = mysql_fetch_array($result)) 
?>

 

На этом первая часть закончена. Двумерный массив postrow хранит все поля таблицы post, необходимые для отображения станицы. Вот пример как можно организовать вывод сообщений.

 

<?php 
echo "<table>"; 
for($i = 0; $i < $num; $i++) 

echo "<tr> 
         <td>".$postrow[$i]['name']."</td> 
         <td>".$postrow[$i]['time']."</td></tr> 
       <tr><td colspan=\"2\">".$postrow[$i]['text']."</td></tr>"; 

echo "</table>"; 
?>

 

Теперь надо организовать навигацию. Формируем составляющие будущей навигации.
Коды стрелки "в начало" и "назад" поместим в одну переменную, также поступим и со стрелками "в конец" и "вперед".

<?php 
// Проверяем нужны ли стрелки назад 
if ($page != 1) $pervpage = '<a href= ./page?page=1><<</a> 
                               <a href= ./page?page='. ($page - 1) .'><</a> '; 
// Проверяем нужны ли стрелки вперед 
if ($page != $total) $nextpage = ' <a href= ./page?page='. ($page + 1) .'>></a> 
                                   <a href= ./page?page=' .$total. '>>></a>'; 

// Находим две ближайшие станицы с обоих краев, если они есть 
if($page - 2 > 0) $page2left = ' <a href= ./page?page='. ($page - 2) .'>'. ($page - 2) .'</a> / '; 
if($page - 1 > 0) $page1left = '<a href= ./page?page='. ($page - 1) .'>'. ($page - 1) .'</a> / '; 
if($page + 2 <= $total) $page2right = ' / <a href= ./page?page='. ($page + 2) .'>'. ($page +2) .'</a>'; 
if($page + 1 <= $total) $page1right = ' / <a href= ./page?page='. ($page + 1) .'>'. ($page +1) .'</a>'; 

// Вывод меню 
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage; 

?>

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 15.06.2012 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Raize Components 6
SAP CRYSTAL Reports 2013 WIN INTL NUL
Quest Software. SQL Navigator Professional Edition
SAP Crystal Reports XI R2 Dev 2006 INTL WIN NUL License (Version 11)
erwin Data Modeler Navigator Edition r9.7 - Product plus 1 Year Enterprise Maintenance Commercial
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Утиль - лучший бесплатный софт для Windows
Проект mic-hard - все об XP - новости, статьи, советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100