Навигация по страницам на PHP
![Навигация по страницам на PHP](/images/articles/php-page-navigation.jpg)
Если у Вас динамический сайт, то, наверняка, Вам потребуется сделать навигацию по страницам. Допустим, если у Вас блог и у Вас есть хотя бы 50 записей, то согласитесь, что на одной странице Вы их все не выведите. Такая страница будет огромной и бестолковой. И в этой статье я расскажу, как сделать навигацию по страницам на PHP.
В основе лежат оператор LIMIT и GET-параметр. Вот примерный алгоритм работы:
- Получить значение GET-параметра, отвечающего за номер страницы.
- На основании значения переданного номера страницы, вывести из базы данных только те записи, которые должны находиться на этой странице.
- Вывести получившиеся записи на страницу.
Чтобы стало понятнее, давайте приведу стандартный код шаблона, который реализует подобный алгоритм:
<?php
$count = 5;// Количество записей на странице
$page = $_GET["page"];// Узнаём номер страницы
$mysqli = new mysqli("localhost", "root", "", "db");// Подключаемся к базе данных
$shift = $count * ($page - 1);// Смещение в LIMIT. Те записи, порядковый номер которого больше этого числа, будут выводиться.
$result_set = $mysqli->query("SELECT * FROM `articles` LIMIT $shift, $count");// Делаем выборку $count записей, начиная с $shift + 1.
/* Выводим результат */
while ($row = $result_set->fetch_assoc()) {
print_r($row);
echo "<br />";
}
?>
Как видите, всё более, чем прозрачно. И сделать навигацию страниц на PHP совсем не трудно. Но теперь главная сложность будет состоять в том, чтобы натянуть эту базу на свой движок. Но здесь уже, увы, только Вы сможете разобраться в коде своего движка.
-
-
Михаил Русаков
Комментарии (38):
А как можно реализовать номера страниц как на картинке в шапке темы?
Ответить
Можно, здесь принцип простой: выводить просто ссылки: <a href="index.php?page=5">5</a>. Вместо 5 вывести в цикле все необходимые страницы. Но здесь простая база, но если хочется делать какой-то сдвиг (допустим, на 1-й странице, можно перейти с 1-й по 10-ю страницу, а на 10 страницы, например, с 5-й по 15-ю), то здесь уже всё гораздо сложнее, и в двух строчках никак не опишешь. Тут надо просто сесть и подумать.
Ответить
Я вот все сделал, но у меня выводит так: Array ( [id] => 1 [theme] => test [newa] => text text text [newb] => text1 text1 text [user] => user [cat] => 3 ) Почему выводит название полей и т.д?
Ответить
Правильно всё выводит, далее нужно этот массив обрабатывать и выводить данные так, как того требует Ваш дизайн и вёрстка. Они у каждого уникальны.
Ответить
А как именно их можно обработать? Можно пример, а то я их ранее не разу не обрабатывал.
Ответить
Почитайте про работу с массивами в PHP. Затем внутрь HTML просто в нужные места подставляйте все данные из массива.
Ответить
"Можно, здесь принцип простой: выводить просто ссылки: <a href="index.php?page=5">5</a>. Вместо 5 вывести в цикле все необходимые страницы." Здравствуйте, Михаил! А можно пример. А то я не совсем понял.
Ответить
for ($i = 1; $i <= 5; $i++) echo "<a href='index.php?page=$i'>$i</a>";
Ответить
Спасибо!
Ответить
Здравствуйте, как можно определить номер страницы чтобы не до (5) надо установить по умолчанию записи страниц в базе данных чтобы дальше 678... Зависит от записи ??? Пожалуйста
Ответить
Fatal error: Call to a member function fetch_assoc() on a non-object in X:\home\test1.ru\www\index.php on line 9 У меня как всегда всё через жопу.
Ответить
Скорее всего, ошибка в запросе.
Ответить
я уже разобрался в чём дело
Ответить
Ребят, а как можно узнать номер последней страницы?
Ответить
Михаил, у меня проблема такого плана. Запрос по нескольким полям с WHERE с формы плюс навигация. Отдельно все идеально работает, и запрос и навигация - вместе никак. Т. е. первая страничка нормально отображается, а при переходе на следующую все... Я так понимаю, проблема в том что не запоминатся результаты запроса. Как это решить? Через сесии?
Ответить
Сам запрос запоминайте в GET-параметре. И сама форма поиска должна иметь метод GET. И передавайте этот параметр на каждую страницу.
Ответить
Михаил, спасибо! Пробывал, но не выходит. Понимаю, что проблема в голове, но какая есть... Реализовал через сесии - работает. Наверное для такого способа реализации есть противопоказания?
Ответить
Можно и через сессии.
Ответить
Не могли бы Вы показать, как исправили эту проблему? У меня тоже самое...
Ответить
Добрый вечер Михаил. Помогите код не проходит валидацию: Line 318, Column 73: an attribute value specification must be an attribute value literal unless SHORTTAG YES is specified …iv class="pstrnav"><b>1</b> | <a href=gallery.php?cat=&page=2>2</a> | <a href=… ✉ Line 318, Column 84: an attribute value must be a literal unless it contains only name characters …strnav"><b>1</b> | <a href=gallery.php?cat=&page=2>2</a> | <a href=gallery.php… ✉ You have used a character that is not considered a "name character" in an attribute value. Which characters are considered "name characters" varies between the different document types, but a good rule of thumb is that unless the value contains only lower or upper case letters in the range a-z you must put quotation marks around the value. In fact, unless you have extreme file size requirements it is a very very good idea to always put quote marks around your attribute values. It is never wrong to do so, and very often it is absolutely necessary.
Ответить
Надо писать не &, а & в ссылках.
Ответить
Спасибо валидацию прошел. Если интересно можете оценить сайт www.clearsky62.ru Буде рад критике. Это мое первое детище во многом благодаря Вашему сайту.
Ответить
Михаил, точно не знал в какой раздел написать и решил написать тут. Проходя Ваш курс PHP и MySql с нуля до Гуру есть ошибка в функции getPagination(); Точнее в цикле: for($i = 2; $i < $count_pages; $i++) это ваш код, он не выводит последнюю страницу. Ошибка содержится в условии вот правильный код: for($i = 2; $i <= $count_pages; $i++) Это код из урока: protected function getPagination ($count, $count_on_page, $link) { $count_pages = ceil($count / $count_on_page); $sr["number"] = 1; $sr["link"] = $link; $pages = $this->getReplaceTemplate($sr, "number_page"); $sym = (strpos($link, "?") !== false)? "&": "?"; for($i = 2; $i < $count_pages; $i++) { $sr["number"] = $i; $sr["link"] = $link.$sym."page=$i"; $pages .= $this->getReplaceTemplate($sr, "number_page"); } $els["number_pages"] = $pages; return $this->getReplaceTemplate($els, "pagination"); print_r ($count_pages); } P.S. Надеюсь кто изучает будет полезно знать так, как я искал не один час. Хочу выразить Вам свою благодарность за то что Вы делаете, очень познавательно и интересно РЕКОМЕНДУЮ ВСЕМ!!!
Ответить
Напишите мне на [email protected]
Ответить
а как можно сделать что бы количество страниц само добавлялось. Если например записей больше чем на 5 страницах ? 1.3.5.6 и далее само
Ответить
Данный скрипт автоматически добавит новые страницы.
Ответить
спасибо за бесплатные уроки, вот только в артикле много статей, вот уже два дня как мучаюсь постраницу не могу сделать на пхп, пробовал добавить в артикл и интро-артикл но никак, дизайн по уроку сделан, не знаю что делать???
Ответить
на дипломку задание с института, сайт isrip.tk только начил делать и застрял, меню "состав института" там статей надо на постраничку делить, вроде на чистом шаблоне делается, с помошью скриптов, а применить к своему никак не получается, помогите плииз!??
Ответить
В статье все довольно доступно объянено. Либо посмотрите в видеоуроках, там это тоже разбиралось.
Ответить
уже неделю мучаюсь, никак не получается, замучался, у меня ошибку выдает на строке while ($row = $result_set->fetch_assoc()) { пробовал добавить в артиклс в директории блокс.но нет,на платном уроке токо лимит указан а что дальше не соображаю. пробовал все, даже 100% ные скрипты не могу установить, помогите прошу
Ответить
Как понимаю, у Вас эта ошибка? http://myrusakov.ru/php-fetchassoc.html
Ответить
а как "натянуть эту базу" на тот сайт, что в вашем бесплатном курсе по PHP? На конкретном примере было бы легче разобраться чайникам. Спасибо
Ответить
Я хочу в главной странице сайта поставить навигацию страниц, как можно это реализовать.
Ответить
Здраствуйте, Михаил.Как можно сделать постраничную навигацию на этот код index.php?view=video&t=<?=$item['title_url'];?> userfiles/video/<?=$item['img'];?>
Ответить
Добавлять параметр page в ссылку.
Ответить
Здраствуйте, Михаил.Как можно сделать постраничную навигацию на этот код foreach($video as $item):?> <div class="video"> <a href="index.php?view=video&t=<?=$item['title_url'];?>"><img src="userfiles/video/<?=$item['img'];?>" alt="<?=$item['title'];?>" width="200" height="120" /></a> <div class="video-title"><a href="index.php?view=video&t=<?=$item['title_url'];?>"><div class="video-title"><?=$item['title'];?></div></a></div> </div> <?endforeach;}?> Помогите пожалуйста.
Ответить
for ($i = 1; $i <= 5; $i++) echo "<a href='index.php?page=$i'>$i</a>"; использовал данный код для вывода кнопок с низу выдачи БД здесь работает хорошо. Вопрос: Как сделать ограничение на вывод кнопок вида 1 ...10 11 <b>12</b> 13 14... 100 ?? И еще как сделать что бы выбранная страница всегда заключалась в тег Б тоесть выделялась чем то
Ответить
Здравствуйте, как определить активную страницу и задать стил к нему. Например 1 2 3 <span class=active>4</span> 5. Заранее спасибо.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.