Автор Тема: Yii2: простой способ организации постраничной разбивки  (Прочитано 2209 раз)

Марахтанов Алексей

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 205
    • marahtanov.ru
Реализовать постраничную разбивку в Yii 2.0 очень просто. Для этого вам нужно внести изменения в контроллер (файл, где вы путем запроса к Active Record извлекаете данные) и представление (файл, где содержится html-код вывода результата запроса на экран).

Рассмотрим эту задачу на конкретном примере.

БЕЗ ПОСТРАНИЧНОЙ РАЗБИВКИ

Пускай у вас есть модель User (пользователи), имеющая свойства (атрибуты): id, fio, role, is_del
В контроллере вы запросом получаете всех пользователей с ролью 'student' и передаете массив (результат) в представление list (список студентов)

use app\models\User;
public function actionList()
{
     $users = User::find()->where(["role"=>'student'])->all();
     return $this->render('list', [
   'users' => $users
]);
}

а в представлении вы выводите список пользователей

foreach ($users as $user) {
    echo "ФИО: " . $user->fio . "<br>";
}


ДОБАВЛЯЕМ ПОСТРАНИЧНУЮ РАЗБИВКУ

В контроллере добавляем в секцию use класс use yii\data\Pagination;
Немного переписываем запрос (синтаксис), поскольку нам придется вызвать его 2 раза: для определения общего числа элементов, и для получения выборки.
Создаем объект Pagination, указывая общее число записей, и число записей на странице.
Созданный объект pages также передаем в представление
use app\models\User;
use yii\data\Pagination;
public function actionList()
{
     $query = User::find()->where(["role"=>'student']);
     $countQuery = clone $query;
     $pages = new Pagination(['totalCount' => $countQuery->count(), 'pageSize'=>20]);
     $users = $query->offset($pages->offset)->limit($pages->limit)->all();
     return $this->render('list', [
   'users' => $users,
           'pages' => $pages
]);
}

В представление добавляем код, который выведет ссылки для перехода между страницами


use yii\widgets\LinkPager;

foreach ($users as $user) {
    echo "ФИО: " . $user->fio . "<br>";
}

echo LinkPager::widget([
    'pagination' => $pages,
]);

Документация на официальном сайте Yii: yiiframework.com/doc-2.0/yii-data-pagination.html
« Последнее редактирование: 06 Март 2016, 16:21:18 от Марахтанов Алексей »