Yii2 使用自带的分页类

使用方式

1、控制器中的修改

use yii\data\Pagination;
$query = Blog::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,
]);

2、视图中的修改

use yii\widgets\LinkPager;
//循环展示数据
foreach ($models as $model) {
    // ......
}
//显示分页页码
echo LinkPager::widget([
    'pagination' => $pages,
])

自带的分页类都可以定义哪些属性

LinkPager组件

  • pagination参数必填,这个是我们Pagination类的实例
    默认分页类是下面这个样子的
    在这里插入图片描述
  • 上下页按钮以及10个按钮

首先,我们把上下页的按钮修改成中文

echo LinkPager::widget([ 
    'pagination' => $pages, 
    'nextPageLabel' => '下一页', 
    'prevPageLabel' => '上一页', 
]);

如果你不想要显示上下页,可以将prevPageLabel和nextPageLabel设置为false

echo LinkPager::widget([ 
    'pagination' => $pages, 
    'nextPageLabel' => false, 
    'prevPageLabel' => false, 
]); 

默认不显示首页也尾页,如果你需要,可以这样设置

echo LinkPager::widget([ 
    'pagination' => $pages, 
    'firstPageLabel' => '首页', 
    'lastPageLabel' => '尾页', 
]);

如果你的数据过少,不够2页,默认不显示分页,如果你需要,设置hideOnSinglePage=false即可

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

默认显示的页码为10页,可以设置maxButtonCount为你想要展示的页数

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

分页带上自己的样式,可以设置options,不要忘了自行实现pre,next,disabled等样式

echo LinkPager::widget([ 
    'pagination' => $pages, 
    'options' => ['class' => 'm-pagination'], 
]); 

Pagination组件

  • 默认的分页路由是下面这样子的
/blog/index?page=2&per-page=20

指定总条数totalCount

$pages = new Pagination([ 
    'totalCount' => $totalCount, 
]);

默认修改默认页码pageSize,默认为20

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

分页路由不显示 per-page

$pages = new Pagination([ 
    'totalCount' => $totalCount, 
    'pageSizeParam' => false, 
]);

改变路由第几页 page 的参数名称为 y

$pages = new Pagination([ 
    'totalCount' => $totalCount, 
    'pageParam' => 'y', 
]);

隐藏路由

$pages = new Pagination([ 
    'totalCount' => $totalCount, 
    'route' => false, 
]);

分页的 bug(友好验证)

当只有1页的数据,但是手动更改地址栏的page=20的时候,也会显示page=1的数据,设置validatePage=false即可避免掉该问题

$pages = new Pagination([ 
    'totalCount' => $totalCount, 
    'validatePage' => false, 
]);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章