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,
]);