Оглавление

Введение Первое знакомство Структура приложения Обработка запросов Основные понятия Работа с базами данных Получение данных от пользователя Отображение данных Безопасность Кеширование Веб-сервисы REST Тестирование Специальные темы Виджеты Хелперы
Зачем реклама?

Постраничное разделение данных

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

Если вы используете провайдер данных с одним из виджетов данных, то в этом случае будет автоматически использовано постраничное разделение данных. В противном случае вам требуется создать объект \yii\data\Pagination, заполнить его такими данными как общее количество элементов, количество элементов на одной странице и текущая страница, затем применить его к запросу и передать в элемент нумерации страниц.

Первым делом в действии контроллера мы создаем объект постраничного разделения данных и заполняем его данными:

function actionIndex()
{
    
$query Article::find()->where(['status' => 1]);
    
$countQuery = clone $query;
    
$pages = new Pagination(['totalCount' => $countQuery->count()]);
    
$models $query->offset($pages->offset)
        ->
limit($pages->limit)
        ->
all();

    return 
$this->render('index', [
         
'models' => $models,
         
'pages' => $pages,
    ]);
}

Затем в представлении мы выводим модели для текущей страницы и передаем объект постраничного разделение данных в элемент нумерации страниц:

foreach ($models as $model) {
    
// отображаем здесь $model
}

// отображаем ссылки на страницы
echo LinkPager::widget([
    
'pagination' => $pages,
]);

Зачем реклама?