Как сделать навигацию php

Добавил пользователь Валентин П.
Обновлено: 05.10.2024

Сложного особо нечего нет, может это мне так кажется, но в любом случаи я постараюсь как можно подробней описать процесс установки и последующее оформление стилей постраничной навигации.

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

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

Постраничная навигация для WordPress на основе PHP без плагина

Вот сам код, который надо вставить в файл functions.php в конец кода перед ?>:

Теперь открываем файлы index.php, search.php и archive.php. Советую использовать для редактирования файлов текстовый редактор Notepad++.

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


Ели у вас уже был установлен плагин WP-PageNavi, то ищем такой код:

И заменяем вышеуказанные строчки на:

Если возникли сложности со поиском нужных строчек, пишите в комментариях — постараюсь помочь!

Прописываем стили для постраничной навигации

Стили для плагина WP-PageNavi выглядят так:

Эти стили вполне подходят и для данного PHP решения. Просто скопируйте стили и вставьте в конец файла style.css, который находится в папке с вашей темой.

Можно немного приукрасить нашу навигацию, изменить цвет фона или немного скруглить края, настроить отступы и т.д, но для этого необходимо иметь хотя бы базовые знания в языках HTML и CSS.

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

Ну а на десерт я приготовил для вас готовые стили, которые я сам составлял для постраничной навигации моего блога

Большое спасибо за вашу помощь и внимательность к нам!

Постраничная навигация есть практически на каждом сайте, так как является неотъемлемой его частью, позволяет удобно и правильно использовать ресурс в плане перехода с одной страницы на другую, экономя при этом значительно скорость загрузки ресурса в целом. В данном материале, мы рассмотрим постраничную навигацию выполненную посредством языков веб программированию php и mysql.

Создадим базу данных navigation с привилегиями: имя пользователя - "root", пароль -"". В ней будем хранить две таблицы: materials и navigation. В таблице materials будут два поля: id и title, а в таблице navigation будут тоже два поля: id и materials.

Таблица materials.

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

Таблица navigation.

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

Для начала, давайте подключимся к базе данных MySQL.

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

Во-первых, таким образом будет проще изменять количество материалов с помощью обновления при обращении к таблице navigation. Во-вторых, не потребуется водить значение количества материалов в переменную. При перемещении по навигации, задействована данная страница index.php, поэтому если у Вас навигация будет находится в другом файле, который по другому назван, соответственно исправьте на нужный!

Ну и последнее действие, это вывод всех материалов. Делаем запрос к таблице materials и выводим оттуда все записи из таблицы, а также не забываем прописать переменные с лимитом $start и $num, - это в общем, то и есть наша постраничная навигация.

Предадим немного стилей нашей навигации.

Надеюсь, данный урок был Вам полезен и возможно где-то пригодиться или уже пригодился! Если же вдруг Вам не нужна постраничная навигация, а примеру Вы хотите чтобы данные подгружались, советую рассмотреть материал AJAX подгрузка контента при прокрутке, возможно она Вам больше пригодится!

Есть одно еще маленькое замечание, если потребуется вывести блог с изменением количества материалов на странице, ну допустим, в select будет список количества материалов на странице 1, 3, 10, 15 и так далее - пишите в комментариях и я расскажу как это можно реализовать. Спасибо всем за внимание, удачи!

Роман Чернышов PHP навигация на php, постраничная разбивка Комментариев 22 Дата 28 Дек


Разрабатывая очередной проект, будь то крупный сайт или маленький скрипт, бывает необходимость в использовании постраничной разбивки выводимых данных. И реализация кнопок постраничной навигации. Казалось бы чего проще? Но не смотря на достаточно простую задачу, у многих программистов порой уходит час, а то и более на написание скрипта постраничной навигации. В то время, когда можно использовать готовое решение, и не тратить драгоценное денежное время на простые банальности.

Предлагаю вашему вниманию решение, которое я использую в своих проектах. На мой взгляд этот код достаточно универсален и его легко встроить в любой скрипт или CMS.

Выводим ссылки на страницы:

Стили оформления кнопок навигации:

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

Если возникнут вопросы по установке или какому-то участку кода, пишите в комментариях, постараюсь максимально объяснить, что и куда.

Похожие записи

22 комментария to “Постраничная навигация на PHP”

Скажите, а как в этом скрипте реализовать примерно такое >>
Т.е., если страниц больше 5, то скрывать остальные и добавить точки ().

Для реализации вывода навигации с большим числом отображаемых страниц(ссылок), нужно немного дописать код. Я предлагаю просто в зависимости от кол-ва страниц добавлять n-ое кол-во ссылок, добавив соответствующее условие, и внутри него цикл. Честно говоря, тоже сталкивался с данной задачей, но пока руки не дошли, в ближайшее время допишу код и выложу здесь.

думаю реализация точек тоже не составит труда, предусмотрю этот момент когда буду переписывать код

Обновил код, он содержал лишние строки.

Данный кусок года следует вставить в скрипт отвечающий за вывод списка записей в категории. Какая у вас CMS ? Могу помочь с установкой кода в скрипт.

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

Замена значений GET-параметров в адресах

Нередко бывает нужно получить URL, идентичный текущему, за исключением значения одного из GET-параметров.

Распространенный пример — номер страницы списка:

$url = substitute_url_get_parameter ( 'p' , 2 ) ;

Если в качестве значения GET-параметра функции передать NULL , то он будет полностью исключен из адреса:

Если в адресе нужно заменить сразу несколько параметров, это можно сделать за один вызов функции:

По умолчанию функция использует адрес текущей страницы ( $_SERVER [ 'REQUEST_URI' ] ). Если нужно использовать какой-то другой, его следует передать в качестве третьего аргумента:

Есть специальный режим работы функции, который позволяет удалить из адреса все GET-параметры, кроме указанных, которым, при желании, установить другие значения или же оставить их в неизменном виде:

Как видно из примера, для работы в этом режиме первым аргументом функции нужно передать массив, первым элементом которого является строка '-' , а последующими — те переменные, которые следует оставить в адресе.

Соответственно, вызов вида substitute_url_get_parameter ( [ '-' ] ) позволяет получить адрес без GET-параметров.

Разбиение списка на страницы

Типичная задача при работе со списком — получить перечень ссылок, соответствующих разным страницам этого списка. Номеру страницы при этом соответствует некоторый GET-параметр; в случае первой страницы он не задан и не должен присутствовать в ссылке на нее. Все остальные части адреса от страницы к странице должны сохраняться неизменными.

Для решения такой задачи служит функция nav_pages ( ) :

$pages = nav_pages (
'p' , // номер страницы - в $_GET[p]
20 , // сколько записей на одной странице
$total_rows // суммарное число записей в разбиваемом на странице списке
) ;

В случае текущего адреса /catalogue/?a=100&b=200&p=3 результат работы функции будет таким:

Array
(
[list] => Array
(
[1] => Array
(
[url] => /catalogue/?a=100&b=200
[num] => 1
[min] => 1
[max] => 20
)

[2] => Array
(
[url] => /catalogue/?a=100&b=200&p=2
[num] => 2
[min] => 21
[max] => 40
)

[3] => Array
(
[url] => /catalogue/?a=100&b=200&p=3
[num] => 3
[min] => 41
[max] => 60
[current] => 1
)

[4] => Array
(
[url] => /catalogue/?a=100&b=200&p=4
[num] => 4
[min] => 61
[max] => 80
)

[special] => Array
(
[current] => Array
(
[url] => /catalogue/?a=100&b=200&p=3
[num] => 3
[min] => 41
[max] => 60
)

[prev] => Array
(
[url] => /catalogue/?a=100&b=200&p=2
[num] => 2
[min] => 21
[max] => 40
)

[next] => Array
(
[url] => /catalogue/?a=100&b=200&p=4
[num] => 4
[min] => 61
[max] => 80
)

Ссылки prev и next присутствуют, если текущей не является первая или последняя страница соответственно. Ссылки first и last присутствуют в случае, если первая или последняя страница не попали в общий список из-за ограничения на его длину 1 . Это ограничение можно установить, передав функции дополнительный аргумент:

$pages = nav_pages (
'p' ,
20 ,
$total_rows ,
10 // перечень страниц должен состоять не более чем из 10-ти ссылок (не считая special)
) ;

Число записей на одной странице может, в свою очередь, регулироваться GET-параметром — можно указать функции использовать этот параметр и установить значение по умолчанию на случай, если он не задан:

$pages = nav_pages (
'p' ,
[ 'N' , 20 ] , // число записей забираем из $_GET[N]
$total_rows , // если же $_GET[N] пуст или вовсе не задан — выводим по 20 штук
10
) ;

Наконец, последним аргументом можно передать адрес, отличный от $_SERVER [ 'REQUEST_URI' ] .

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

HTML-код такого меню можно получить из следующего шаблона (здесь и далее приводятся примеры для шаблонизатора websun):

В шаблоне для этого используются ключи min и max :

forward соответствует странице, следующей за последней из основного списка.

3. ▲ Представление по умолчанию включается в случае отсутствия в адресе страницы GET-параметра, регулирующего представление.

// первый вариант
$cfg = [
[ '' , 'построчно' ] ,
[ 'grid' , 'сетка' ] ,
[ 'plates' , 'плашки' ]
] ;

// второй вариант
$cfg = [
[ 'value' => '' , 'title' => 'построчно' ] ,
[ 'value' => 'grid' , 'title' => 'сетка' ] ,
[ 'value' => 'plates' , 'title' => 'плашки' ]
] ;

Полную форму необходимо использовать, если значениями являются целые числа и при этом в качестве текстов используются не значения, а что-то другое. Например:

$cfg = [
[ 1 , 1000 ] ,
[ 2 , 2000 ] ,
[ 3 , 3000 ] ,
[ 5 , 'пять тысяч' ] ,
[ 7 , 'семь тысяч' ] ,
[ 10 , 'десять тысяч' ] ,
[ 'value' => 20 , 'title' => 'двадцать тысяч' ] ,
[ 'value' => 30 , 'title' => 'тридцать тысяч' ] ,
[ 'value' => 40 , 'title' => 40000 ] ,
[ 'value' => 50 , 'title' => 50000 ] ,
] ;

5. ▲ + — это URL-закодированный пробел. ASC — по возрастанию (от ascendant), DESC — по убыванию (от descendant), по аналогии с синтаксисом языка SQL.

В список страниц добавлены специальные ссылки forward и backward. Удобна для случаев, когда нужно показать номера последней и первой страниц и отделить их от остальных, например, многоточиями:

(ссылка forward уже была в версии от 18.03.17 и там называлась further)

25.02.16. Инструмент переключения режимов сортировки: для случая, когда каждому направлению соответствует отдельная ссылка, изменена структура массива, добавлен уровень вложенности.

Читайте также: