yii2 pagination Пэйджинация, разбивка выборка на страницы - пример кода с комментариями
Primary tabs
Чтобы использовать стандартную пэйджинацию в контроллере напишем:
use yii\data\Pagination; public function actionIndex() { // сначала указываем базовый запрос -- как будто вся бвыборка без пэйджинации $query = Ticket::find()->where(['status' => 1])->orderBy('id DESC'); $countQuery = clone $query; // копируем его // рассчитаем числа для пэйджинатора - число страниц "до" и после и номер текущей // устновив предварительно число строк на странице, например 5 шт. $pages = new Pagination(['totalCount' => $countQuery->count(), 'pageSize' => 5]); // производим выборку элементов уже для конкретной страницы $models = $query->offset($pages->offset) // ->limit($pages->limit) // $pages->limit ->all(); // передаём выбранные данные в представление return $this->render('index', [ 'models' => $models, 'pages' => $pages, // инфа для виджета пэйджера ]); }
ну а в представлении что-то вроде:
<?php use yii\widgets\LinkPager; ?> <table class="table"> <thead class="thead-inverse"> <tr> <th>Имя</th> <th>Электропочта</th> <th>Сообщение</th> </tr> </thead> <tbody> <?php foreach ($models as $ticket) { // выводим данные для этой страницы echo '<tr>'; echo "<td>$ticket->name</td> <td>$ticket->email</td> <td>$ticket->message</td> "; echo '</tr>'; } ?> </tbody> </table> <?php // отображаем виджет пэйджера echo LinkPager::widget([ 'pagination' => $pages, ]); ?>
ПРИМЕЧАНИЕ: Следует заметить, что работа пэджинации основана на ссылках вида:
localhost/admin/site/index?page=2&per-page=3
т.е. используются GET-параметры. при этом класс Pagination сам обратится к ним и выяснит какое именно смещение при выборке нужно для очередной страницы, что очень удобно.
Источники:
- (помогла эта заметка) Постраничная навигация в Yii 2.x: http://www.webapplex.ru/postranichnaya-n...
- Log in to post comments
- 7387 reads