Yii2 pagination

Yii2 pagination

От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы с вами рассмотрим вопрос Yii2 pagination, т.е. использование постраничной навигации на сайте.

Итак, в этой статье мы рассмотрим работу с постраничной навигацией на сайте и используем для этого класс Pagination. Использование данного класса может нам потребоваться для пользовательской части сайта в тех разделах, где присутствуют большие массивы данных. Например, это может быть каталог товаров или лента новостей и т.п. Сразу стоит оговориться, что в админской части сайта, где используются виджеты данных, можно использовать провайдер данных и в этом случае будет автоматически сформирована постраничная разбивка данных. Однако, пользовательской части сайта виджеты данных используются редко и там проще воспользоваться классом Pagination.

К примеру, давайте выведем все посты нашего сайта. Для этого в контроллере мы получим их и передадим в представление:

public function actionIndex()
{
 $posts = Post::find()->all();
 return $this->render('index', compact('posts'));
}

И в представлении выведем данные с нужным оформлением:

<?php foreach($posts as $post): ?>
 <div class="panel panel-default">
 <div class="panel-heading"><?= $post->title ?></div>
 </div>
<?php endforeach; ?>

Yii2 pagination

Фреймворк YII2. Быстрая разработка с современным PHP фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Узнать подробнее

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

Вот для таких случаев как раз и необходима постраничная разбивка данных, когда на первой странице представлена первая «порция» данных, а на следующие «порции» мы даем ссылки в виде постраничной навигации (пагинации).

Давайте немного перепишем код получения данных, обратившись к классу Pagination.

public function actionIndex()
{
 //$posts = Post::find()->all();
 $query = Post::find();
 $pages = new Pagination(['totalCount' => $query->count()]);
 $posts = $query->offset($pages->offset)
 ->limit($pages->limit)
 ->all();
 return $this->render('index', compact('posts', 'pages'));
}

В представление добавим использование виджета LinkPager, который построит постраничную навигацию:

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

И в итоге мы получим теперь только часть данных (по умолчанию это 20 записей), а следующие части будут доступны по ссылкам сгенерированной постраничной навигации.

Yii2 pagination

Поскольку у меня количество записей – 21, а по умолчанию класс Pagination выбирает по 20 записей на страницу, — мы получили две страницы: на первой странице выводятся первые 20 записей, на второй – оставшаяся последняя. Давайте попробуем немного настроить пагинацию. Например, 20 записей на страницу может быть достаточно много, давайте уменьшим это число до 5 записей на страницу. Для этого используем параметр pageSize с необходимым значением:

$pages = new Pagination(['totalCount' => $query->count(), 'pageSize' => 5]);

Yii2 pagination

Отлично, работает! Давайте попробуем походить по страницам и убедимся, что пагинация работает. Она работает, но вот URL в адресной строке возможно вы захотите поменять. По умолчанию он выглядит примерно так:

Yii2 pagination

Давайте попробуем добиться такого варианта — http://yii2/post/page/2. Для этого добавим еще пару параметров к настройкам:

$pages = new Pagination(['totalCount' => $query->count(), 'pageSize' => 5, 'forcePageParam' => false, 'pageSizeParam' => false]);

И пару правил для маршрутов в файл config/web.php:

'rules' => [
 'post/page/<page:\d+>' => 'post/index',
 'post/' => 'post/index',
],

Yii2 pagination

После этого ссылки пагинации должны принять нужным нам вид:

Yii2 pagination

На этом сегодня все. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.

Фреймворк YII2. Быстрая разработка с современным PHP фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Узнать подробнее
Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Фреймворк YII2: теория и первая практика

Овладейте азами фреймворка Yii2 за 5 дней!

Получить

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree