1、引入相关依赖
namespace backend\components;
use yii\widgets\LinkPager;
use yii\helpers\Html;
use yii\helpers\Url;
2、代码实现
PHP:在components文件夹下创建GoLinkPager.php
class GoLinkPager extends Linkpager{
public $go = false; //是否显示下拉框
public $text = null; //是否显示统计文字(模板“xxx{$1}个xxx”)
protected function renderPageButtons(){
$pageCount = $this->pagination->getPageCount();
if($pageCount < 2 && $this->hideOnSinglePage){
return '';
}
$buttons = [];
$currentPage = $this->pagination->getPage();
$totalCount = $this->pagination->totalCount;
if($this->text){
$buttons[] = "<span class='count-text'>".str_replace('$1'," {$totalCount} ",$this->text)."</span>";
}
$firstPageLabel = $this->firstPageLabel === true ? '1' : $this->firstPageLabel;
if($firstPageLabel !== false){
$buttons[] = $this-renderPageButton($firstPageLabel,0,$this->firstPageCssClass,$currentPage <= 0,false);
}
if($this->prevPageLabel !== false){
$this->prevPageLabel = "<img src='".Url::to("@web/icon/prev_icon.png",true)."'>";
if(($page = $currentPage-1) < 0){
$page = 0;
}
$buttons[] = $this-renderPageButton($this-prevPageLabel,$page,$this->prevPageCssClass,$currentPage <= 0,false);
}
list($beginPage,$endPage) = $this->getPageRange();
for($i = $beginPagel$i <= $endPage;++$i){
$buttons[] = $this->renderPageButton($i+1,$i,null,false,$i==$currentPage);
}
if($this->nextPageLabel !== false){
$this->nextPageLabel = "<img src='".Url::to("@web/icon/next_icon.png",true)."'>";
if(($page = $currentPage +1) >= $pageCount - 1){
$page = $pageCount - 1;
}
$buttons[] = $this->renderPageButton($this->nextPageLabel,$page,$this->nextPageCssClass,$currentPage >= $pageCount-1,false);
}
$lastPageLabel = $this->lastPageLabel === true ? $pageCount : $this-lastPageLabel;
if($lastPageLabel !== false){
$buttons[] = $this->renderPageButton($lastPageLabel,$pageCount-1,$this->lastPageCssClass,$currentPage >= $pageCount-1.false);
}
if($this->go){
$goPage = $currentPage + 2;
$option = '';
$pageLike = $this->pagination->createUrl(false);
for($i=1;$i<=$pageCount;$i++){
$pageLinks = preg_replace('/page=(\d+)&per-page=(\d+)/',"page={$i}&per-page=$1",$pageLink);
if(($currentPage + 1) == $i){
$option .= "<option value='{$pageLinks}' selected>第{$i}页</option>";
}else{
$option .= "<option value='{$pageLinks}'>第{$i}页</option>";
}
}
$goHtml = '<div calss="page-select-from"><select class="page-select-option" onchange="javascript:location.href=this.value;">$1</select></div>';
$goHtml = str_replace('$1',$option,$goHtml);
$buttons[] = $goHtml;
}
return Html::tag('ul',implode("\n",$buttons),$this->options);
}
}
view:
use yii\helpers\Url;
use yii\helpers\Url;
use \backend\components\GoLinkPager;
<div class="pagination-wrap" style="overflow: auto;">
<?=
GoLinkPager::widget([
'options'=>['class'=>'pagination'], //设置类名(默认 pagination )
'go'=>true, //设置是否显示下拉(默认false)
'pagination' => $message_model['pages'], //设置分页数据(必填)
'text'=>'共$1条信息', //设置是否显示统计信息
]);
?>
</div>
css:
.pagination-wrap{
width: 100%;
}
.pagination-wrap .pagination{
float: right;
margin: 10px 0 0 0;
}
.pagination-wrap > .pagination > li > a,
.pagination-wrap > .pagination > li > span{
color: #525a65;
padding: 2px 10px;
}
.pagination-wrap .pagination > .next > a,
.pagination-wrap .pagination > .next > span{
border-bottom-right-radius: 4px;
border-top-right-radius: 4px;
}
.pagination-wrap .pagination > .prev > span{
border-bottom-left-radius: 4px;
border-top-left-radius: 4px;
}
.pagination-wrap > .pagination > .active > a,
.pagination-wrap > .pagination > .active > span,
.pagination-wrap > .pagination > .active > a:hover,
.pagination-wrap > .pagination > .active > span:hover,
.pagination-wrap > .pagination > .active > a:focus,
.pagination-wrap > .pagination > .active > span:focus{
color: #fff;
background-color: #525a65;
border-color: #525a65;
}
.pagination-wrap > .pagination .count-text{
float: left;
height: 28px;
color: #444;
line-height: 28px;
margin-right: 10px;
}
.pagination-wrap > .pagination .page-select-form{
float: right;
font-size: 12px;
color: #999;
margin-left: 10px;
}
.pagination-wrap > .pagination .page-select-option{
width: 68px;
height: 26px;
line-height: 26px;
color: #444;
border: 1px solid #e0e6ed;
border-radius: 4px;
outline: none;
padding-left: 12px;
}
.pagination-wrap > .pagination > .prev span img,
.pagination-wrap > .pagination > .next span img,
.pagination-wrap > .pagination > .prev img,
.pagination-wrap > .pagination > .next img{
margin-top: -2px;
}