分析thinkphp自带的分页函数

来源:互联网 发布:恶意软件图片 编辑:程序博客网 时间:2024/05/17 12:02

上次应前端要求修改了tp自带的ajax分页类,当时限于时间,取巧的定制了下,今天活比较轻松,仔细看了下该分页类的实现原理,下面使用图文来说明。


当前页为第一页时,显示分页栏每页显示的页数(5页),下一页,最后一页,当前页数/共多少页,共多少条记录数。


当页面大于1时,显示上一页,页栏每页显示的页数(5页),下一页,最后一页,当前页数/共多少页,共多少条记录数。


注意,上面两幅图出现的前提是当前分页栏(当前页/分页栏每页显示页面数)等于1,并且“当前的分页栏数不等于总分页栏数”。上面两幅图处于第一个分页栏,因此当前页/5向上取整为1,同时总页数为14页,分页显示的页数为5页,那么总分页栏数则是14/5,向上取整则为3。



当前分页栏大于1并且当前的分页栏数不等于总分页栏数时显示第一页,上一页,分页栏每页显示的页数,下一页,最后一页,当前页数/共多少页,共多少条记录数。




当前分页栏等于总分页栏并且当前页不等于总页数时显示第一页,上一页,分页栏每页显示的页数(△),下一页,当前页数/共多少页,共多少条记录数。



当前分页栏等于总分页栏并且当前页等于总页数时显示第一页,上一页,分页栏每页显示的页数(△),当前页数/共多少页,共多少条记录数。



总共只有一页的情况显示当前页数/共多少页,共多少条记录数。




当前页大于1,并且总分页栏为1的情况显示上一页,分页栏每页显示的页数(△),下一页,当前页数/共多少页,共多少条记录数。


看了上面几幅图后,理解下面代码就更加容易了。


        // 上下翻页字符串        $upRow   = $this->nowPage-1;        $downRow = $this->nowPage+1;        // 当前页大于1时,显示上一页,否则便不显示        if ($upRow>0){            $upPage="<a href='javascript:getList(".$upRow.");'>".$this->config['prev']."</a>";        }else{            $upPage="";        }        // 当前页面栏数为1,第一页便不显示,否则显示第一页        if($nowCoolPage == 1){            $theFirst = "";            $prePage = "";        }else{            $preRow =  $this->nowPage-$this->rollPage;            $prePage = "";            $theFirst = "<a href='javascript:getList(1);'>".$this->config['first']."</a>";        }        // 当前页面加1小于等于最大页面时,显示下一页        if ($downRow <= $this->totalPages){            $downPage="<a href='javascript:getList(".$downRow.");'>".$this->config['next']."</a>";        }else{            $downPage="";        }        // 当前页面栏数等于总页面栏数,最后一页不显示,否则显示最后一页        if($nowCoolPage == $this->coolPages){            $nextPage = "";            $theEnd="";        }else{            $nextRow = $this->nowPage+$this->rollPage;            $theEndRow = $this->totalPages;            $nextPage = '';            $theEnd = "<a href='javascript:getList(".$theEndRow.");'>".$this->config['last']."</a>";        }

这里着重解释下标有三角形△地方的代码解释。

        // 1 2 3 4 5        $linkPage = "";        for($i=1;$i<=$this->rollPage;$i++){            $page=($nowCoolPage-1)*$this->rollPage+$i;            if($page!=$this->nowPage){                if($page<=$this->totalPages){                    $linkPage .= "<a href='javascript:getList(".$page.");'>".$page."</a>";                }else{                    break;                }            }else{                if($this->totalPages != 1){                    $linkPage .= "<a class='current' href='javascript:void(0);'>".$page."</a>";                }            }        }

因为分页栏每页显示5页,那么不到五页呢,上面的for循环中有个判断若是当前页大于总页数便break掉了。


至此,分析完毕。今后我还会多写下thinkphp源码的解读,以加强自己印象,多学习下。

0 0
原创粉丝点击