Форумы портала PHP.SU » PHP » Пользовательские функции » Класс для постраничной навигации

Страниц (1): [1]
 

1. teddy - 06 Февраля, 2014 - 20:52:36 - перейти к сообщению
[Этот класс устарел, новый здесь:
http://forum.php.su/topic.php?fo...ostid=1415290936 ]

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

Код класса. Отформатирован хреново ввиду того, что не вмещается нормально в блок. В файле с кодом, который я приложил к теме, таких проблем нет.
Спойлер (Отобразить)

Данный класс может работать в двух режимах, в стандартном и в режиме с фильтром. Отличие режимов будет описано ниже.

Пример использования в стандартном режиме. Инициализация параметров.
PHP:
скопировать код в буфер обмена
  1.  
  2. $page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
  3. $pagination = new Pagination(5, $page, 'items', array('name', 'description'));

Значение параметров
1. Количество записей, выводимых на одну страницу.
2. $_GET параметр, по которому осуществляется выборка(номер страницы).
3. Таблица, из которой нужно забрать записи
4. Массив, в который нужно передать нужные поля для выборки.

PHP:
скопировать код в буфер обмена
  1.  
  2. $content = $pagination->getPageContent();
  3. if($content){
  4.     var_dump($content);//здесь лежат записи
  5.     var_dump($pagination->showPages('http://site.ru/pagination.php?page='));//а здесь лежит навигация(кнопочки вперед, назад, 123). В скобках указываем ссылку, по которой должен работать пагинатор.
  6. }else{
  7.     //страница не найдена
  8. }
  9.  

Пример использования в режиме с фильтром. Инициализация параметров.
PHP:
скопировать код в буфер обмена
  1.  
  2. $page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
  3. $pagi = new Pagination(10, $page, 'items', array('item', 'description'), Pagination::FILTER_MODE, "WHERE `price` > :price", array(':price' => $price));
  4.  

Первые 4 параметра такие же как и в первом примере.
5. Параметр это константа FILTER_MODE которая сообщает классу, что запрос будет будет содержать фильтр(лимит указывать не нужно).
6. Собственно сам фильр, извращайтесь там как угодно, сортируйте, группируйте и т.д
Фактически если следовать данному примеру, то фильтр придется в эту часть запроса:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `item`, `description` FROM `items` тут все что вы напишите в фильтр LIMIT генерируется сам

7. Массив, который передается для значений параметров, которые были переданы в запрос.

Остальное все то же самое, как в вышеуказанном примере. Страницы и контент получается стандартным образом.

Примечание:
Классу безразлично ЧПУ у Вас или нет. Если ЧПУ, тогда в метод showPages передайте соответствующую ссылку.

Так же хочу заметить, класс использует PDO для работы с БД. Для тех кто пользуется mysql или mysqli нужно будет изменить пару строчек, но это я оставлю на Вас Улыбка

Вроде бы всё.
2. Ch_chov - 07 Февраля, 2014 - 06:28:13 - перейти к сообщению
Зачем же каждый раз при создании пагинации устанавливать новое соединение с базой?
3. teddy - 07 Февраля, 2014 - 15:11:23 - перейти к сообщению
Ch_chov
Банальное соединение было указано для того что бы было наглядно "Что и откуда берется". А так конечно же каждый может указать его по своему, это никак не нарушает принципы работы класса
4. mustafa007 - 05 Сентября, 2014 - 13:42:22 - перейти к сообщению
Пользуйте на здоровье Улыбка

Спойлер (Отобразить)

 

Powered by ExBB FM 1.0 RC1