Yii2的page组件重写

1 篇文章 0 订阅

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',"&nbsp{$totalCount}&nbsp;",$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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值