YII 工厂模式封装分页功能

<?php

namespace common\helper;

use Yii;

class PageHelper {

    static function getPage($dataProvider) {
        $url = Yii::$app->request->getHostInfo() . Yii::$app->request->url;
       // var_dump($url);die;
        $url = preg_replace('/&page=[\d+]*$/', '', $url);
        $url = preg_replace('/\?page=[\d+]*$/', '', $url);
        $page = (int) Yii::$app->request->get('page', 1);
        return PageHelper::pageList($url, $dataProvider->totalCount, $page, $dataProvider->pagination->pageSize);
    }

    /**
     * 分页
     * @param unknown_type $total
     * @param unknown_type $pageid
     * @param unknown_type $psize
     * @param unknown_type $half
     */
    static function pageList($url, $total, $pageid = 1, $psize = 10, $half = 2, $isHtm = false, $anchor = '', $seo = 0) {
        //echo $pageid;
        $pageData = self::createPageData($url, $total, $pageid, $psize, $half);
        $pageLabelHtml = '';
        $questionMark = $isHtm == false && strpos($url, '?') ? '&' : '?';
        foreach ($pageData as $label) {
            if ($label['status'] == 'enable') {
                if ('<' == $label['page']) {
                    $page = $pageid - 1;
                    $class = 'tonext_on';
                } elseif ('>' == $label['page']) {
                    $page = $pageid + 1;
                    $class = 'tonext_on';
                } else {
                    $page = $label['page'];
                    $class = '';
                }
                if ($isHtm) {
                    if (($page == 1) && ($seo == 1)) { //seo需求,第一页和默认页url不一样,但是内容一致
                        $changeurl = str_replace('-', '', $url);
                        $page = '';
                    } else {
                        $changeurl = $url;
                    }
                    $pageLabelHtml .= '<li><a  class="fy_a ' . $class . '" href="' . $changeurl . $page . '.htm' . $anchor . '">' . $label['page'] . '</a></li>';
                } else {
                    $pageLabelHtml .= '<li><a  class="fy_a ' . $class . '" href="' . $url . $questionMark . 'page=' . $page . $anchor . '">' . $label['page'] . '</a></li>';
                }
            } elseif ($label['status'] == 'disabled') {
                if ('<' == $label['page']) {
                    $pageLabelHtml .='<li class="prev disabled"><span><</span></li>';
                } elseif ('>' == $label['page']) {
                    $pageLabelHtml .='<li class="next disabled"><span>></span></li>';
                } else {
                    $pageLabelHtml .= '<li class="middle disabled"><span>' . $label['page'] . '</span></li>';
                }
            } elseif ($label['status'] == 'current') {
                $pageLabelHtml .= '<li class="active"><span>' . $label['page'] . '</span></li>';
            }
        }
        $pageTotal = ceil($total / $psize); //总共的页数
        if($pageLabelHtml){
            
            $pageLabelHtml .= '<li><input type="text" id="pagego" class="btn-self btn"  style="width:60px;border: 1px solid #8796b0;border-radius: 3px;" value="' . $pageid . '"  onfocus="goPage()"></li>';
            $pageLabelHtml .= self::getbutton($total,$pageTotal);
        }else{
            $pageLabelHtml .=' 共 '.$pageTotal.' 页,共计 '.$total.' 条';
        }
        return $pageLabelHtml;
    }

    /**
     * 分页数据构造
     * Enter description here ...
     * @param unknown_type $url
     * @param unknown_type $total
     * @param unknown_type $pageid
     * @param unknown_type $psize
     * @param unknown_type $half
     */
        static function createPageData($url, $total, &$pageid = 1, $psize = 10, $half = 2) {
        //分页函数,$total=总共的条数;$pageid=当前显示的页号;$psize=每页显示的条数;$half=$pageid前后显示的条数
        $totalpage = ceil($total / $psize); //总共的页数
        $pageid = $pageid > $totalpage ? $totalpage : $pageid;
        $i = 0;
        $arr = array();
        if ($totalpage < 2) {//小于2页,不显示分页
            return $arr;
        }
        $arr[$i]["page"] = "<";
        $arr[$i]["status"] = $pageid == 1 ? "disabled" : 'enable';
        if($totalpage<=10){
            for ($i=1; $i <=$totalpage ; $i++) {
                 if($pageid==$i){
                    $arr[$i]["page"] = $pageid;
                    $arr[$i]["status"] = "current";
                }else{
                    $arr[$i]["page"] = $i;
                    $arr[$i]["status"] = "enable";
                }
            }
        }else{
            $i++;
            if($pageid>=$totalpage-$half-3){ //左边显示省略号  ...
                $arr[$i]["page"] = 1;
                $arr[$i]["status"] = "enable";
                $i++;
                $arr[$i]["page"] = "...";
                $arr[$i]["status"] = "disabled";
                $i++;
                $j=$totalpage-2*$half-3;
                while ($j<=$totalpage) {
                    if($pageid==$j){
                        $arr[$i]["page"] = $j;
                        $arr[$i]["status"] = "current";
                    }else{
                        $arr[$i]["page"] = $j;
                        $arr[$i]["status"] = "enable";
                    }
                    $i++;
                    $j++;
                }
            }
            if($pageid<=$half+3){ //右边显示省略号  ...
                while ($i<=2*$half+3) {
                    if($pageid==$i){
                        $arr[$i]["page"] = $pageid;
                        $arr[$i]["status"] = "current";
                    }else{
                        $arr[$i]["page"] = $i;
                        $arr[$i]["status"] = "enable";
                    }
                    $i++;
                }
                $arr[$i]["page"] = "...";
                $arr[$i]["status"] = "disabled";
                $i++;
                $arr[$i]["page"] = $totalpage-1;
                $arr[$i]["status"] = "enable";
                $i++;
                $arr[$i]["page"] = $totalpage;
                $arr[$i]["status"] = "enable";
                $i++;
            }
            if($pageid>$half+3&&$pageid<$totalpage-$half-3){    //俩边显示省略号  ...
                $arr[$i]["page"] = 1;
                $arr[$i]["status"] = "enable";
                $i++;
                $arr[$i]["page"] = "...";
                $arr[$i]["status"] = "disabled";
                $i++;
                for ($j = 0; $j < $half; $j++, $i++) {//$pageid前面的[最多$half个]
                    if ($pageid - $half + $j < 2) {//
                        $i--; //使$i保持不变
                        continue;
                    }/**/
                    $arr[$i]["page"] = $pageid - $half + $j;
                    $arr[$i]["status"] = "enable";
                } {//中间项
                    $arr[$i]["page"] = $pageid;
                    $arr[$i]["status"] = "current";
                    $i++;
                }
                for ($j = 0; $j < $half; $j++, $i++) {//$pageid后面的[最多($half-1)个]
                    if ($pageid + $j + 1 > $totalpage) {//
                        $i++;
                        break;
                    }
                    $arr[$i]["page"] = $pageid + $j + 1;
                    $arr[$i]["status"] = "enable";
                }
                $arr[$i]["page"] = "...";
                $arr[$i]["status"] = "disabled";
                $i++;
                $arr[$i]["page"] = $totalpage-1;
                $arr[$i]["status"] = "enable";
                $i++;
                $arr[$i]["page"] = $totalpage;
                $arr[$i]["status"] = "enable";
                $i++;
            }
        }
        $arr[$i]["page"] = ">";
        $arr[$i]["status"] = $pageid == $totalpage ? 'disabled' : "enable";
        return $arr;
    }

    /**
     * 跳转按钮 js
     * TODO空格回车直接跳转
     * @return string
     */
    static function getbutton($total=1,$pageTotal=1) {
        $url = Yii::$app->request->getHostInfo() . Yii::$app->request->url;
        $url = preg_replace('/page=[\d+]*$/', 'page=', $url);
        if (!strpos($url, '?')) {
            $url .= '?page=';
        }
        if (!strpos($url, 'page=')) {
            $url .= '&page=';
        }
        $js = '<script>'
                . ' function goJump(){ var page = document.getElementById("pagego").value; var jumpPage="' . $url . '"+page; window.location.href=jumpPage; } '
                . 'function goPage(){ document.getElementById("pagego").value = ""} '
                . '</script>';
        $button = ' <li> <button type="submit" class="btn btn-info" style="background-color: #50ABFF;" onclick="return goJump()" > 跳转</button></li>  共 '.$pageTotal.' 页,共计 '.$total.' 条';
        return $button . $js;
    }

}

?>

//首页 实例类

 public function actionIndex()
    {
        $searchModel = new DataSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $pageLabelHtml = PageHelper::getPage($dataProvider);
        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
            'pageLabelHtml' =>$pageLabelHtml
        ]);
    }

//视图类

 <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'pager'=> [
            'options'=>['class'=>'hidden']
        ],
        'columns' => [
            'id',
            'name',

            ['class' => 'yii\grid\ActionColumn',
                'header'=>'操作',
                'template' => '{update} {delete}',
            ],
        ],
    ]); ?>
    <ul class="pagination">
        <?=$pageLabelHtml ?>
    </ul>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值