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

Среда, 27 июля 2011 г.
Рубрика: PHP программирование -> Готовые решения
Метки: |
Просмотров: 549
Подписаться на комментарии по RSS
В этом уроке мы хотели бы усовершенствовать нашу постраничную навигацию.

В чём же главный недостаток прошлой постраничной навигации?

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

В новой версии навигации будут следующие плюсы:

1) Навигационные кнопки на первую и на последнюю страницы.

2) Рядом с ссылкой на страницу, на которой мы находимся - будет по две ссылки на предыдущие страницы и на следующие.

3) Навигационные кнопки на предыдущую и следующую страницы.

Главный плюс - не будет огромное кол-во ссылок в навигации - все они будут умещаться в 5 ссылок, которые будут меняться по мере перехода по ним.

Такая навигация будет намного удобнее и проще.

Теперь поговорим о самом коде:

1) Соединяемся с базой

2) Заносим кол-во статей в базе в переменную

3) Если статей нет, то выводим ошибку, иначе ...

4) Заносим кол-во статей для вывода на страницу в переменную

5) Высчитываем кол-во ссылок навигации

6) Берём из адресной строки обозревателя номер нашей страницы

7) Если номер меньше 0, то присваиваем ему 1, если больше положенного, то максимальное значение

8) Высчитываем с какой статьи будем выводить, и делаем sql запрос

9) Выводим эти статьи в цикле

10) Если мы находимся не на первой странице, то ссылка "предыдущая" будет активна, иначе активна она не будет

11) Если мы не находимся на первой странице, то выводим ссылку для быстрого переноса на первую страницу

12) Проверяем есть ли боковые ссылки, и которые есть - выводим

13) Если мы не на последней странице, то ссылка "следующая" будет активна, иначе активна она не будет

14) Если мы не на последней странице, то выводим ссылку для быстрого переноса на последнюю страницу

А вот и сам код, с подробным описанием:

<html>
<head>
<style type="text/css">
 a {
  color: #006699;
  text-decoration: none;
 }
 a:hover{
  color: #ff0000;
 }
 </style>
<title>Links</title>
</head>
<body>
<?php
/*
* Подключаемся к базе
*/
$db = mysql_connect ( "localhost", "root", "" );
mysql_select_db ( "articles", $db );
/*
* Узнаём кол-во статей в базе при помощи функции COUNT ()
*/
$num_articles_res = mysql_query ( "SELECT COUNT(*) FROM articles" );
$num_articles_row = mysql_fetch_array ( $num_articles_res );
$num_articles = $num_articles_row[0];
// Если статей нет, то выводим сообщение о том, что статей нет
if ( $num_articles < 1 ) {
	die ( "No articles" );
} else {
	//Кол-во статей на странице
	$number_articles = 5;
	//Высчитываем кол-во ссылок
	$number_pages = intval ( ( ( $num_articles - 1 ) / $number_articles ) + 1 );
	/*
	* Принимаем номер страницы из адресной строки, если такового нет, то опускаем ошибку, и
	* присваиваем ему 1, иначе берём число из адресной строки
	*/
	@$page = $_GET["page"];
	if ( empty ( $page ) or ( $page < 0 ) ) {
		$page = 1;
	}
	//Если номер страницы превышает допустимый, то присваиваем ему максимальный номер
	if( $page > $number_pages ) {
		$page = $number_pages;
	}
	//Высчитываем с какой статьи будем выводить
	$begin = ( $page * $number_articles ) - $number_articles;
	//Если получилось 0, то присваиваем 1
	if ( $begin = 0 ) {
	$begin = 1;
	}
	/*
	* Проверяем есть ли в базе статьи
	*/
	$result_articles = mysql_query ( "SELECT * FROM articles ORDER BY id DESC LIMIT $begin, $number_articles" );
	/*
	* Если статьи есть, то выводим их
	*/
	do {
		printf ( "%s<br />%s<br /><br />", $row_articles["title"], $row_articles["description"] );
	} while ( $row_articles = mysql_fetch_array( $result_articles ) );
 
	// Если мы не на первой странице, то выводим ссылку на предыдущую страницу, иначе она не активна
	if ( $page > 1 ) {
		echo " <a href=index.php?page=".($page - 1).">&nbsp;<tt>Предыдущая&nbsp;</tt></a> ";
	} else {
		echo " <tt>&nbsp;Предыдущая&nbsp;</tt> ";
	}
	
	/*
	* Теперь будем выводить две соседние ссылки с каждой стороны, и ссылки для быстрого переноса
	* на первую и последнюю страницы
	*/
	// Если мы не на первой странице, то выводим ссылку на первую, иначе она не действительна
	if ( $page > 1 ) {
		echo "<tt><a href=index.php?page=1>&nbsp;<<&nbsp;</a></tt>";
	} else {
		echo "<tt>&nbsp;<<&nbsp;</tt>";
	}
	// Выводим по две крайние ссылки, если таковые имеются - то есть соблюдается кол-во ссылок
	if ( $page - 2 > 0 ) {
		echo "<tt><a href=index.php?page=".($page - 2).">&nbsp;".($page - 2)."&nbsp;</a></tt>";
	}
	if ( $page - 1 > 0 ) {
		echo "<tt><a href=index.php?page=".($page - 1).">&nbsp;".($page - 1)."&nbsp;</a></tt>";
	}
	echo " <tt class = 'a_visit'>&nbsp;$page&nbsp;</tt> ";
	if ( $page + 1 <= $number_pages ) {
		echo "<tt><a href=index.php?page=".($page + 1).">&nbsp;".($page + 1)."&nbsp;</a></tt>";
	}
	if ( $page + 2 <= $number_pages ) {
		echo "<tt><a href=index.php?page=".($page + 2).">&nbsp;".($page + 2)."&nbsp;</a></tt>";
	}
	// Если мы не на последней странице, то выводим ссылку на последнюю, иначе она не действительна
	if ( $page < $number_pages ) {
	echo "<tt><a href=index.php?page=$number_pages>&nbsp;>>&nbsp;</a></tt>";
	} else {
		echo "<tt>&nbsp;>>&nbsp;</tt>";
	}
   
	// Если мы не на последней странице, то выводим ссылку на следующую страницу, иначе она не активна
	if ( $page < $number_pages ) {
		echo " <a href=index.php?page=".($page + 1)."><tt>&nbsp;Следующая&nbsp;</tt></a> ";
	} else {
		echo " <tt class = 'not_active'>&nbsp;Следующая&nbsp;</tt> ";
	}
}
?>
</body>
</html>

Код полностью проверен и протестирован...

Поделиться...
twitter.com facebook.com vkontakte.ru mail.ru google.com bobrdobr.ru
Комментариев: 1
  1. а как статьи добавлять в базу???:red:

Оставьте свой комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор, укажите пароль и свой действующий email.

(обязательно)