<commit_before><commit_msg>add output-pagination.md<commit_after>分页
==========

当一次要在一个页面上显示很多数据时，通过需要将其分为
几部分，每个部分都包含一些数据列表并且一次只显示一部分。这些部分被称为
分页，例如 pagination。
  
如果你使用 [data provider](output-data-providers.md) 和 [data widgets](output-data-widgets.md) 中之一
pagination 已经为你自动排序。否则，你需要创建 [[\yii\data\Pagination]]
对象，为其填充数据例如 [[\yii\data\Pagination::$totalCount|total item count]]，
[[\yii\data\Pagination::$pageSize|page size]] 和 [[\yii\data\Pagination::$page|current page]]，apply
it to the query and then feed it to [[\yii\widgets\LinkPager|link pager]].


首先在 controller action，我们创建 pagination 对象并且为其填充数据：

```php
function actionIndex()
{
    $query = Article::find()->where(['status' => 1]);
    $countQuery = clone $query;
    $pages = new Pagination(['totalCount' => $countQuery->count()]);
    $models = $query->offset($pages->offset)
        ->limit($pages->limit)
        ->all();

    return $this->render('index', [
         'models' => $models,
         'pages' => $pages,
    ]);
}
```

其次在视图中我们输出的模板为当前页并通过 pagination 对象链接到该页：

```php
foreach ($models as $model) {
    // display $model here
}

// display pagination
echo LinkPager::widget([
    'pagination' => $pages,
]);
```
{'fraction_non_alphanumeric': 0.18197135636057288, 'fraction_numerical': 0.0008424599831508003, 'mean_word_length': 4.525581395348837, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 16, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3207868', 'n_tokens_mistral': 498, 'n_tokens_neox': 520, 'n_words': 81}