yii2 pagination Пэйджинация, разбивка выборка на страницы - пример кода с комментариями

Чтобы использовать стандартную пэйджинацию в контроллере напишем:

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 сам обратится к ним и выяснит какое именно смещение при выборке нужно для очередной страницы, что очень удобно.

Источники:

  1. (помогла эта заметка) Постраничная навигация в Yii 2.x: http://www.webapplex.ru/postranichnaya-n...

Key Words for FKN + antitotal forum (CS VSU):