这里以 Yii 2.0 基础版为例,来介绍数据分页。
操作分页的类文件为
/basic/vendor/yiisoft/yii2/data/Pagination.php
首先,在
/basic/entity 目录中新建一个 User.php 文件,用于查询分页数据,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 |
<?php
namespace
app\entity
;
use
yii\data\Pagination
;
class
User
{
public
static
function
getList
()
{
try
{
$db
=
\Yii
::
$app
->
db
;
// 1. 获取符合条件的记录总数
$count
=
$db
->
createCommand
(
'SELECT COUNT(*) AS count from {{%user}}'
)
->
queryOne
();
if
(
$count
)
{
// 2. 根据记录总数,实例化pagination对象
$pages
=
new
Pagination
([
'totalCount'
=>
$count
[
'count'
],
'defaultPageSize'
=>
10
]);
// 3. 根据pagination对象的offset和limit属性,查询记录列表
$list
=
$db
->
createCommand
(
'SELECT * FROM {{%user}} LIMIT '
.
$pages
->
offset
.
','
.
$pages
->
limit
)
->
queryAll
();
$ret
=
[
'success'
=>
true
,
'pages'
=>
$pages
,
'list'
=>
$list
];
}
else
{
throw
new
\Exception
(
'查询失败!'
);
}
}
catch
(
\Exception
$e
)
{
$ret
=
[
'success'
=>
false
,
'msg'
=>
$e
->
getMessage
()];
}
return
$ret
;
}
}
|
其次,在控制器层新建一个控制器文件 PageController.php,用于测试分页,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
<?php
namespace
app\controllers
;
use
yii\base\Controller
;
use
app\entity\User
;
class
PageController
extends
Controller
{
function
actionTest
()
{
$res
=
User
::
getList
();
if
(
$res
[
'success'
]
==
false
)
{
die
(
$res
[
'msg'
]);
}
else
{
// 4. 渲染视图,并传递变量
return
$this
->
renderPartial
(
'test'
,
[
'list'
=>
$res
[
'list'
],
'pages'
=>
$res
[
'pages'
]]);
}
}
}
|
然后,在视图层
/basic/views 目录下新建一个文件夹 page,再在
/basic/views/page 目录中新建一个视图文件 test.php,代码如下:
1
2
3
4
5
6
7 |
<?php
// 5. 显示记录列表
var_dump
(
$list
);
echo
'<br>'
;
// 6. 显示分页导航
echo
\yii\widgets\LinkPager
::
widget
([
'pagination'
=>
$pages
]);
|
最后,在浏览器中访问
http://basic.com/page/test,查看分页的效果。