Постраничная навигация
Для постраничной навигации реализован класс paginator. Ниже представлен полный список методов этого класса. Все экземпляры этого класса имеют «текучий интерфейс», поэтому можно использовать цепочки вызовов. В конце дан пример использования.
paginator::getEmptyDefault()
Статический метод. Возвращает пустые значения по умолчанию, как если бы запрос вернул пустой результат.
$paginator = new paginator($sourceQuery)
Создает экземпляр пагинатора. Принимает в качестве аргумента сформированную, экранированную строку валидного SQL-запроса, который может содержать любые условия выборки, сортировку, группировку, присоединения (JOIN), подзапросы и другие конструкции. Внимание! Входной SQL-запрос в основном своем «scope» не должен содержать конструкцию вида:
LIMIT x,y
Т.е. Вы должны передать пагинатору запрос без лимитов, даже если в таблице 60 тысяч записей.
$paginator->
setCurrentPage($number)
Устанавливает номер текущей активной страницы просматриваемых данных. По умолчанию, если не был вызван этот метод, будет указана первая страница.
$paginator->
setItemsPerPage($number)
Устанавливает количество записей выводимых на одну страницу. По умолчанию, если не был вызван этот метод, будет установлено значение 10 записей на страницу.
$paginator->
setSliceSizeByPages($number)
Устанавливает максимально допустимое количество страниц, отображаемых в списке нумерации, где текущая страница будет находится по возможности в центре списка. По умолчанию устанавливается значение равное 10.
$paginator->
setCountQuery($query)
Опция устанавливает Ваш собственный запрос к базе данных для подсчета общего количества выводимых элементов. Данный метод может быть использован, только если того требует ситуация.
$paginator->
getResult()
Метод возвращает массив с результатами работы пагинатора. Массив результатов содержит следующие ключи:
- number_of_items — общее количество найденных записей;
- number_of_pages — общее количество страниц, с учетом установленных ранее опций и ограничений;
- current_page — номер текущей страницы;
- items — массив выбранных к показу на текущей странице элементов;
- pages — массив страниц, с указанием текущей, с учетом установленных ранее опций и ограничений;
Пример работы с постраничной навигацией
$query = 'SELECT id, node_name FROM tree ORDER BY id DESC';
$paginator = new paginator($query);
$paginator
->setCurrentPage(1) // текущая страница — первая
->setItemsPerPage(4) // по 4 элемента на страницу
->setSliceSizeByPages(10); // максимум 10 кнопок для навигации
$result = $paginator->getResult();
var_dump($result);
Этот пример вернет содержащий все необходимые данные массив вида:
array(5) {
["number_of_items"]=>
string(2) "39" // общее количество записей
["number_of_pages"]=>
float(10) // общее количество страниц
["current_page"]=>
int(1) // номер текущей страницы
["items"]=>
array(4) {
[0]=>
array(2) {
[«id»]=>
string(2) "41"
["page_name"]=>
string(80) "Название документа 41"
}
[1]=>
array(2) {
["id"]=>
string(2) "40"
["page_name"]=>
string(55) "Название документа 40"
}
[2]=>
array(2) {
["id"]=>
string(2) "39"
["page_name"]=>
string(53) "Название документа 39"
}
[3]=>
array(2) {
["id"]=>
string(2) "38"
["page_name"]=>
string(39) "Название документа 38"
}
}
["pages"]=> // страницы навигации
array(6) {
[0]=>
array(2) {
["number"]=>
int(1)
["current"]=>
bool(true) // текущая
}
[1]=>
array(2) {
["number"]=>
int(2)
["current"]=>
bool(false)
}
[2]=>
array(2) {
["number"]=>
int(3)
["current"]=>
bool(false)
}
[3]=>
array(2) {
["number"]=>
int(4)
["current"]=>
bool(false)
}
[4]=>
array(2) {
["number"]=>
int(5)
["current"]=>
bool(false)
}
[5]=>
array(2) {
["number"]=>
int(6)
["current"]=>
bool(false)
}
}
}