yii2基礎之分頁的基本使用及其配置詳解

先說明下咱們本篇文章都要講哪些內容yii2

  • 分頁的使用,一步一步的教你怎麼作
  • 分頁類LinkPager和Pagination均可以自定義哪些屬性

第一步,咱們來看看yii2自帶的分頁類該如何去使用?yii

一、controller actionide

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

二、Viewthis

use yii\widgets\LinkPager;
//循環展現數據
foreach ($models as $model) {
    // ......
}
//顯示分頁頁碼
echo LinkPager::widget([
    'pagination' => $pages,
])

代碼基本上能夠徹底拷貝,修改部分數據便可,相信大多數人都是看得懂的。blog

咱們接下來看第二步,自帶的分頁類均可以定義哪些屬性接口

 

首先咱們說說LinkPager組件路由

  • pagination參數必填,這個是咱們Pagination類的實例

默認分頁類是下面這個樣子的get

909d21bec4-yii2page1.png

  • 上下頁按鈕以及10個按鈕
  • 首先,咱們把上下頁的按鈕修改爲中文
<?= LinkPager::widget([ 
    'pagination' => $pages, 
    'nextPageLabel' => '下一頁', 
    'prevPageLabel' => '上一頁', 
]); ?>
  • 若是你不想要顯示上下頁,能夠將prevPageLabel和nextPageLabel設置爲false
<?= LinkPager::widget([ 
    'pagination' => $pages, 
    'nextPageLabel' => false, 
    'prevPageLabel' => false, 
]); ?>
  • 默認不顯示首頁也尾頁,若是你須要,能夠這樣設置
<?= LinkPager::widget([ 
    'pagination' => $pages, 
    'firstPageLabel' => '首頁', 
    'lastPageLabel' => '尾頁', 
]); ?>
  • 若是你的數據過少,不夠2頁,默認不顯示分頁,若是你須要,設置hideOnSinglePage=false便可
<?= LinkPager::widget([ 
    'pagination' => $pages, 
    'hideOnSinglePage' => false, 
]); ?>
  • 默認顯示的頁碼爲10頁,能夠設置maxButtonCount爲你想要展現的頁數
<?= LinkPager::widget([ 
    'pagination' => $pages, 
    'maxButtonCount' => 5, 
]); ?>
  • 有些人不喜歡默認的樣式,想要分頁帶上本身的樣式,能夠設置options,不要忘了自行實現pre,next,disabled等樣式
<?= LinkPager::widget([ 
    'pagination' => $pages, 
    'options' => ['class' => 'm-pagination'], 
]); ?>

接下來咱們談談Pagination組件it

默認的分頁路由是下面這樣子的,咱們看看能作點什麼io

/controller/action?page=2&per-page=20

  • 首先,咱們是必需要指定總條數totalCount的,沒這個參數,分頁也是沒辦法實現的
$pages = new Pagination([ 
    'totalCount' => $totalCount, 
]);
  • 默認分頁的數量是20,你能夠設置pageSize爲你想要的
$pages = new Pagination([ 
    'totalCount' => $totalCount, 
    'pageSize' => 5, 
]);
  • 從上面的分頁路由咱們能夠看到,默認帶的有每頁的數量per-page 若是你不想顯示該參數,設置pageSizeParam=false就好
$pages = new Pagination([ 
    'totalCount' => $totalCount, 
    'pageSizeParam' => false, 
]);
  • 咱們也能夠看到,默認的頁面取決於參數page,若是你想改變該參數爲p,設置pageParam=p就好
$pages = new Pagination([ 
    'totalCount' => $totalCount, 
    'pageParam' => 'p', 
]);
  • 若是你的分頁存在於首頁,相信你確定想要/?p=1而不是/site/index?p=1,咱們看看怎麼隱藏掉路由
$pages = new Pagination([ 
    'totalCount' => $totalCount, 
    'route' => false, 
]);
  • 可能你會發現分頁類Pagination有一個bug,假如咱們只有1頁的數據,可是手動更改地址欄的page=20的時候,也會顯示page=1的數據?固然,這在大部分接口API中就很讓人厭煩。可是,這並不是bug,而是一種友好的驗證。設置validatePage=false便可避免掉該問題
$pages = new Pagination([ 
    'totalCount' => $totalCount, 
    'validatePage' => false, 
]);
相關文章
相關標籤/搜索