Постраничная разбивка
Для разбиения длинного списка записей на страницы в любой модели можно создать объект класса Paginator. Для этого необходимо вызвать метод runPager($total, $limit), где $total - общее количество записей, $limit - количество записей на страницу.
//Файл шаблона в папке views/...
//Подсчет активных записей в таблице
$total_active = $mv -> events -> countRecords(['active' => 1]);
//Запуск разбивки по 10 записей на страницу
$mv -> events -> runPaginator($total_active, 10);
//Теперь можно посмотреть состояние объекта Paginator
Debug::pre($mv -> events -> paginator -> getState());
Таким образом, теперь в функцию вывода событий в модели Events мы можем добавить постраничную разбивку. Более подробно об извлечении записей написано в разделе Конструктор запросов.
public function displayEvents()
{
$rows = $this -> select([
'order->desc' => 'date',
'active' => 1,
'limit->' => $this -> paginator -> getParamsForSelect()
]);
...
}
Для вывода списка ссылок на другие страницы используется метод display() класса Paginator.
//$path - URL к которому будут добавляться номера страниц ('/news', '/catalog/books')
$path = $mv -> root_path.'events';
echo $mv -> events -> paginator -> display($path);
Итоговый вид шаблона для отображения списка событий.
<?
$total_active = $mv -> events -> countRecords(['active' => 1]);
$mv -> events -> runPaginator($total_active, 10);
$path = $mv -> root_path.'events';
include $mv -> views_path.'main-header.php';
?>
<div id='content'>
<? echo $mv -> events -> display(); ?>
<div class='paginator'>
<? echo $mv -> events -> paginator -> display($path); ?>
</div>
</div>
<?
include $mv -> views_path.'main-footer.php';
?>
Методы объекта Paginator
- getState() - возвращают массив параметров пагинации
- setLimit($limit), setTotal($total) - устанавливают лимит и общее количество элементов, пересчитывают интервалы
- display($path) - вывод списка ссылок пагинации, $path - url к которому добавляется GET параметр пагинации
- displayLimits($limits, $path [, $format = ‘links’]) - выводит список ссылок либо options с параметрами лимитов
- hasPages() - проверяет есть ли интервалы, количество интервалов > 1
- checkPrevNext($type) - проверяет есть ли следующая / предыдущая страница от текущей, параметр $type должен иметь значение 'next' или 'prev'
- displayPrevLink($caption, $path) - выводит ссылку на предыдущую страницу если она существует, $caption - текст ссылки, $path - url, к которому будет добавлен параметр вида 'page=3'
- displayNextLink($caption, $path) - аналогично предыдущей функции выводит ссылку на следующую страницу
- addUrlParams($path) - добавляет GET параметр вида 'page=7' (текущую страницу) к переданному URL. Обычно используется для переброски параметров постраничной разбивки в другие модули, например сортировщик или фильтр.
- getUrlParams() - возвращает GET параметр вида 'page=12' (текущую страницу), если общее количество страниц > 1
Ниже приведен пример отображения списка страниц в шаблоне с учетом ссылок на следующую или предыдущую страницу.
<?
...
$path = $mv -> root_path.'events';
include $mv -> views_path.'main-header.php';
?>
<div id='content'>
<? echo $mv -> events -> display(); ?>
<? if($mv -> events -> paginator -> hasPages()): ?>
<div class='paginator'>
<span class='title'>Страница:</span>
<?
echo $mv -> events -> paginator -> displayPrevLink('предыдущая', $path);
echo $mv -> events -> paginator -> display($path);
echo $mv -> events -> paginator -> displayNextLink('следующая', $path);
?>
</div>
<? endif; ?>
</div>
<?
include $mv -> views_path.'main-footer.php';
?>
Предыдущий раздел
Прямые запросы