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-navigacziya-v-yii-2.x
- Log in to post comments
- 8095 reads