На Deep-CMS «напал»:

Typical Programmer

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

Для постраничной навигации реализован класс 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)
    }
  }
}
Deep: 2013-11-12 04:02:18 (обновлено 2014-01-26 15:29:30)

Оставить комментарий

Комментарии:

protection