Spec-Zone.ru › Yii 2.0

Пагинация

Когда данных слишком много для отображения на одной странице, распространенной стратегией является их отображение на нескольких страницах, и на каждой странице отображается только небольшая часть данных. Эта стратегия известна как пагинация.

Yii использует объект yii\data\Pagination для представления информации о схеме пагинации. В частности,

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

С полностью заданным объектом yii\data\Pagination, вы можете частично извлечь и отобразить данные. Например, если вы извлекаете данные из базы данных, вы можете указать OFFSET и LIMIT в запросе к БД с соответствующими значениями, предоставленными пагинацией. Вот пример,

use yii\data\Pagination;

// build a DB query to get all articles with status = 1
$query = Article::find()->where(['status' => 1]);

// get the total number of articles (but do not fetch the article data yet)
$count = $query->count();

// create a pagination object with the total count
$pagination = new Pagination(['totalCount' => $count]);

// limit the query using the pagination and retrieve the articles
$articles = $query->offset($pagination->offset)
    ->limit($pagination->limit)
    ->all();

Какая страница статей будет возвращена в приведенном выше примере? Это зависит от того, задан ли параметр запроса с именем page. По умолчанию пагинация попытается установить текущую страницу равной значению параметра page. Если параметр не задан, он будет по умолчанию равен 0.

Для облегчения создания пользовательского элемента управления, поддерживающего пагинацию, Yii предоставляет виджет yii\widgets\LinkPager, который отображает список кнопок страниц, на которые пользователи могут нажать, чтобы указать, какая страница данных должна быть отображена. Виджет принимает объект пагинации, чтобы знать, какая страница является текущей, и сколько кнопок страниц должно быть отображено. Например,

use yii\widgets\LinkPager;

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

Если вы хотите создать пользовательский элемент управления вручную, вы можете использовать yii\data\Pagination::createUrl() для создания URL-адресов, которые будут вести на разные страницы. Метод требует параметра страницы и создаст правильно отформатированный URL-адрес, содержащий параметр страницы. Например,

// specifies the route that the URL to be created should use
// If you do not specify this, the currently requested route will be used
$pagination->route = 'article/index';

// displays: /index.php?r=article%2Findex&page=100
echo $pagination->createUrl(100);

// displays: /index.php?r=article%2Findex&page=101
echo $pagination->createUrl(101);

Подсказка: Вы можете настроить имя параметра запроса page путем настройки свойства pageParam при создании объекта пагинации.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc-2.0/guide-output-pagination.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API