Как устроена пагинация в YII?

Пагинация возможна в Yii посредством использования класса CPagination. Он представляет собой удобный инструмент для реализации пагинации на веб-страницах. CPagination позволяет устанавливать количество элементов на страницу и общее число элементов, а также извлекать необходимые элементы из источника данных.

Для начала необходимо создать объект CPagination и передать ему общее количество элементов и количество элементов на страницу:

$pagination = new CPagination($totalItemCount);
$pagination->pageSize = $pageSize;

Здесь $totalItemCount - это общее количество элементов, а $pageSize - количество элементов на страницу.

Далее, необходимо настроить источник данных, с которого будут извлекаться элементы для текущей страницы. Это может быть, например, модель или SQL-запрос. Вызовите метод getData объекта пагинации, чтобы получить элементы для текущей страницы:

$data = $dataProvider->getData($pagination);

Здесь $dataProvider - это источник данных, который может быть объектом CActiveDataProvider или CArrayDataProvider.

После этого можно процессить элементы, как обычно:

foreach($data as $item) {
    // процессинг элемента
}

Для отображения числа страниц и ссылок на предыдущую и следующую страницы можно использовать виджет CLinkPager. Необходимо создать объект CLinkPager, передать ему объект пагинации и вывести виджет на странице:

$pages = new CPagination($totalItemCount);
$pages->pageSize = $pageSize;
$pages->applyLimit($criteria);

$this->widget('CLinkPager', array(
    'pages' => $pages
));

$criteria - это объект CDbCriteria, который используется для построения SQL-запроса.

CLinkPager автоматически создаст ссылки на страницы, включая кнопки "Предыдущая" и "Следующая". Также можно настроить вывод дополнительных ссылок и номеров страниц, указав соответствующие свойства CLinkPager.

В конечном итоге, пагинация в Yii позволяет создавать удобные и гибкие интерфейсы для навигации по большим наборам данных. Она облегчает работу с пагинацией и позволяет эффективно управлять общим количеством элементов и количеством элементов на страницу.