Для одних это вовсе не проблема, а для других решить проблему навигации оказывается сложнее чем Вы думаете. Когда разработчик сталкивается с данной проблемой - пытается решить сам, или найти в интернете. Если самому решить не удалось, находит в интернете листинги (уроки) о том как построить правильно навигацию. И вообще в чем именно проблема при постарении навигации?
1. лимит SQL (LIMIT x,y).
2. Как передать параметр содержащий номер страницы
3. А если страниц слишком много? Тогда у неумелых рук, при больших объемах данных и неправильном подходе к проблеме, навигация состоит из огромного количества ссылок, что тоже не является правильным.
4. Как правильно и грамотно придать стиль навигации
Мое решение проблемы это MPPN4 (Max's Post Page Navigation ver. 4).
В данном классе решены все задачи/проблемы указанные выше. Класс подойдет как начинающему так и бывалому кодеру. Решение проблемы навигации подошло к концу.
Документация
Начало работы с классом:
Для начала стоит открыть файл класса, и просмотреть настройки. Я все тщательно комментировал, и не думаю что останутся непонятки.
Если настройки по умолчанию вас устраивают, можете приступать.
Но если вам нужна настройка из скрипта то:
Запуск класса и пример работы
Запуск класса происходит в четырех этапах:
1. Подключение класса
2. Объявление объекта
3. Установка количества записей (при работе с sql, эту функцию выполняет Query(str SQL-query))
3. Вывод навигации
Пример работы:
//Подключаем класс
require_once('mppn.Class.php');
//Объявляем объект класса навигации
$nav = new PageNav;
//Устанавливаем к примеру количество записей на страницу*
$nav->SetParam ( 'per_page', 15);
//Выбираем всех пользователей
$query = $nav->Query("SELECT * FROM `users` #LIMIT"); //#LIMIT - условная переменная**
//Выведем ники пользователей
while ( $data = mysql_fetch_array ( $query ) ) {
echo $data['login'] . "<br/>\n";
}
//Выводим навигацию
$nav->Show();
*Условная переменная #LIMIT заменяется на "LIMIT $start,$per_page" внутри класса относительно текущей страницы, после чего выполняется SQL-Запрос.
**Если не установить - возьмет кол-во записей по умолчанию внутри класса.
Функция настройки
Функция настройки - позволяет записывать параметры из сценария вашего скрипта. Таким образом, можно устанавливать настройки из панели управления например.
Синтаксис функции следующий:
//Подключаем класс
require_once('mppn.Class.php');
//Объявляем объект класса навигации
$nav = new PageNav;
//Устанавливаем к примеру количество записей на страницу
$nav->SetParam ( 'per_page', 15);
//или класс CSS кнопок
$nav->SetParam ( 'buttons_class', 'class_name');
//Или класс CSS текущей кнопки
$nav->SetParam ( 'button_class', 'class_name');
Подробнее о параметрах смотрите "Параметры класса"
С настройками разобрались, переходим непосредственно к навигации и обработки SQL-Запросов (если надо).
Обратите внимание, функции Show([int аргумент]) и Query(str SQL-query) зависимые друг от друга.
Если не выполнить Query(str SQL-query), то в аргументе Show([int аргумент]) обязательно должно быть указано количество записей, которое будет разбиваться на страницы. Ну а если Query(str SQL-query) был выполнен, количество записей передастся из него в функцию класса Show([int аргумент]), и аргумент вводить не обязательно.
Сделано это для расширения функционала. К примеру: постраничная навигация содержимого файла - там абсолютно не нужны sql-запросы.
[spoiler title="Query(str SQL-query)"]Query(str SQL-query) - ВОзвращает то же самое что и mysql_query(), с одним лишь различием - внутри строки можно использовать условную переменную. При переключении страниц, в SQL-запросе должен меняться оператор LIMIT. Потому внутри функции обрабатывается автоматически такая ерунда. И вместо лимита SQL ставится условная переменная "#LIMIT" (без кавычек). Ее также можно изменить в настройках класса (можете вообще поставить *L или lim главное не используйте $).
Также внутри функции подсчитывается количество записей которое будет разбиваться функцией Show([int аргумент]) на страницы, и аргумент функции подставится автоматически.
Show([int аргумент])
Show([int аргумент]) - Выводит навигацию по страницам. В аргументе может принимать количество записей ВСЕГО, после чего разобьет на страницы и выведет навигацию.
Действует по сценарию:
- Если задан аргумент использую его, если нет обращаюсь к Query(str SQL-query) и получаю кол-во записей всего.
- Разбиваю и округляю кол-во записей - получаю количество страниц.
Если количество страниц превишает оптимальный вид, вывожу упрощенную навигацию (5 кнопок), если нет вывожу обычную навигацию (кол-во кнопок зависит от настроек).
Параметры класса
Здесь просто опишу параметры класса:
per_page - количество записей на страницу
optimal - максимальное количество записей с обычной навигацией. (если записей больше - упрощенная навигация)
pars_var - условная переменная SQL-парсера Query(str SQL-query), которая заменяется на оператор LIMIT в SQL.
var - переменная которой будет передаваться номер страницы
buttons_class - css класс для кнопок навигации
button_class - css класс для кнопки навигации номер которой, соответствует текущей странице.
Как оно выглядит?
Ну... при переходе по страницам, в url ничего не меняется (передается формой через POST). Но если нужно попасть на какую-то страницу по ссылке, примит номер страницы и через url. Например если:
class PageNav {
.....
var $var = 'page'; //передается через page в заголовке
.....
}
то 4 страница будет доступна по адресту
http://some-site.ru/some_page.php?page=4
а последняя по адресу
http://some-site.ru/some_page. ... =last