文字
分享

分页

分页

当一次要在一个页面上显示很多数据时,通过需要将其分为 几部分,每个部分都包含一些数据列表并且一次只显示一部分。这些部分在网页上被称为 分页。

如果你使用 数据提供者 和 数据小部件 中之一, 分页已经自动为你整理。否则,你需要创建 \yii\data\Pagination 对象为其填充数据,例如 \yii\data\Pagination::$totalCount, \yii\data\Pagination::$pageSize 和 \yii\data\Pagination::$page,在 查询中使用它并且填充到 \yii\widgets\LinkPager。

首先在控制器的动作中,我们创建分页对象并且为其填充数据:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: inherit; padding: 0px; color: inherit; border-radius: 0px; white-space: pre-wrap; background-color: transparent;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box;">function</span> <span style="box-sizing: border-box;">actionIndex</span><span style="box-sizing: border-box;">()</span></span>{

    <span style="box-sizing: border-box;">$query</span> = Article::find()->where([<span style="box-sizing: border-box;">'status'</span> => <span style="box-sizing: border-box;">1</span>]);

    <span style="box-sizing: border-box;">$countQuery</span> = <span style="box-sizing: border-box;">clone</span> <span style="box-sizing: border-box;">$query</span>;

    <span style="box-sizing: border-box;">$pages</span> = <span style="box-sizing: border-box;">new</span> Pagination([<span style="box-sizing: border-box;">'totalCount'</span> => <span style="box-sizing: border-box;">$countQuery</span>->count()]);

    <span style="box-sizing: border-box;">$models</span> = <span style="box-sizing: border-box;">$query</span>->offset(<span style="box-sizing: border-box;">$pages</span>->offset)

        ->limit(<span style="box-sizing: border-box;">$pages</span>->limit)

        ->all();

 

    <span style="box-sizing: border-box;">return</span> <span style="box-sizing: border-box;">$this</span>->render(<span style="box-sizing: border-box;">'index'</span>, [

         <span style="box-sizing: border-box;">'models'</span> => <span style="box-sizing: border-box;">$models</span>,

         <span style="box-sizing: border-box;">'pages'</span> => <span style="box-sizing: border-box;">$pages</span>,

    ]);

}

</code>

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

foreach ($models as $model) {
    // 在这里显示 $model
}

// 显示分页echo LinkPager::widget([
    'pagination' => $pages,
]);