• 技术文章 >后端开发 >php教程

    一个简单且很好用的php分页类_PHP教程

    2016-07-13 10:25:44原创337
    复制代码 代码如下:

    class Page {
    // 分页栏每页显示的页数
    public $rollPage = 6;
    // 页数跳转时要带的参数
    public $parameter ;
    // 默认列表每页显示行数
    public $listRows = 20;
    // 起始行数
    public $firstRow ;
    // 分页总页面数
    protected $totalPages ;
    // 总行数
    protected $totalRows ;
    // 当前页数
    protected $nowPage ;
    // 分页的栏的总页数
    protected $coolPages ;
    // 分页显示定制
    protected $config = array(
    'redirect'=>false,
    'header'=>'条记录',
    'prev'=>'上一页',
    'next'=>'下一页',
    'first'=>'1',
    'last'=>'最后一页',
    'theme'=>'
    %upPage% %first% %prePage% %linkPage% %nextPage% %downPage%
    共 %totalPage% 页');
    // 默认分页变量名
    protected $varPage;

    /**
    +----------------------------------------------------------
    * 架构函数
    +----------------------------------------------------------
    * @access public
    +----------------------------------------------------------
    * @param array $totalRows 总的记录数
    * @param array $listRows 每页显示记录数
    * @param array $parameter 分页跳转的参数
    +----------------------------------------------------------
    */
    public function __construct($totalRows,$listRows='',$parameter='') {
    $this->totalRows = $totalRows;
    $this->parameter = $parameter;
    $this->varPage = C('VAR_PAGE') ? C('VAR_PAGE') : 'p' ;
    if(!empty($listRows)) {
    $this->listRows = intval($listRows);
    }
    $this->totalPages = ceil($this->totalRows/$this->listRows); //总页数
    $this->coolPages = ceil($this->totalPages/$this->rollPage);
    //$_GET验证
    $this->nowPage = intval($_GET[$this->varPage]);
    $this->nowPage = $this->nowPage > 0 ? $this->nowPage : 1;

    if(!empty($this->totalPages) && $this->nowPage>$this->totalPages) {
    $this->nowPage = $this->totalPages;
    }
    $this->firstRow = $this->listRows*($this->nowPage-1);
    }

    public function setConfig($name,$value) {
    if(isset($this->config[$name])) {
    $this->config[$name] = $value;
    }
    }

    /**
    +----------------------------------------------------------
    * 分页显示输出
    +----------------------------------------------------------
    * @access public
    +----------------------------------------------------------
    */
    public function show() {

    if(0 == $this->totalRows) return '';

    //处理参数
    $p = $this->varPage;
    $url = $_SERVER['REQUEST_URI'].(strpos($_SERVER['REQUEST_URI'],'?')?'':"?").$this->parameter;
    $parse = parse_url($url);
    if(isset($parse['query'])) {
    parse_str($parse['query'],$params);
    unset($params[$p]);
    $url = $parse['path'].'?'.http_build_query($params);
    }

    /* 分页逻辑 */

    //当总数小于显示的页码数
    if ($this->totalPages <= $this->rollPage) {
    $start = 1;
    $end = $this->totalPages;
    }
    else{
    //
    if ($this->nowPage <= $this->rollPage - 1) {
    $start = 1;
    $end = $this->rollPage;

    $islast = true;
    }
    else if ($this->nowPage > $this->totalPages - $this->rollPage + 1) {
    $start = $this->totalPages - ($this->rollPage - 1);
    $end = $this->totalPages;

    $isfirst = true;
    }
    else{
    //浮动数
    $size = floor($this->rollPage / 2);

    $start = $this->nowPage - $size;
    $end = $this->nowPage + $size;

    $isfirst = true;
    $islast = true;
    }
    }

    //上下翻页字符串
    $upRow = $this->nowPage - 1;
    $downRow = $this->nowPage + 1;


    /* 拼装HTML */

    //< 1... ...last >
    if ($isfirst){
    $theFirst = "".$this->config['first']."";
    }
    if ($islast){
    $theEnd = "".$this->config['last']."";
    }

    if ($upRow > 0){
    $upPage = "".$this->config['prev']."";
    }

    if ($downRow <= $this->totalPages){
    $downPage = "".$this->config['next']."";
    }

    if($start==3){
    $linkPage .= "2";
    }
    if($start>=4){
    $linkPage .= "2 ...";
    }
    //1 2 3 4 5
    for($i=$start;$i<=$end;$i++){
    if($i!=$this->nowPage){
    $linkPage .= " ".$i." ";
    }else{
    $linkPage .= " ".$i."";
    }
    if($i==$end){
    if($i<$this->totalRows){
    $linkPage .= " ...";
    }
    }
    }

    $pageStr = str_replace(
    array('%header%','%nowPage%','%totalRow%','%totalPage%','%upPage%','%first%','%prePage%','%linkPage%','%nextPage%','%downPage%','%end%'),
    array($this->config['header'],$this->nowPage,$this->totalRows,$this->totalPages,$upPage,$theFirst,$prePage,$linkPage,$nextPage,$downPage,$theEnd),$this->config['theme']);

    //显示模式 普通false 带跳转ture
    if (!empty($this->config['redirect'])){
    $html = $pageStr;

    }else{
    //传递参数
    if($this->totalPages > 1){
    $redirect = " 到第

    ";
    if ($params){
    foreach($params as $k => $v){
    $string .= "";
    }
    $redirect = $redirect . $string . '
    ';
    }else{
    $redirect = $redirect . '
    ';
    }
    }
    //生成Html字符串
    $html = $pageStr . $redirect;
    }
    return $html;
    }

    }

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/824939.htmlTechArticle复制代码 代码如下: class Page { // 分页栏每页显示的页数 public $rollPage = 6; // 页数跳转时要带的参数 public $parameter ; // 默认列表每页显示行数...

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 分页类
    上一篇:调整PHP的性能_PHP教程 下一篇:php四种基础算法代码实例_PHP教程
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• 细思极恐?关于in_array的第3个参数• 急那位老师帮小弟我看看这段代码 • PHP登录跳转,该怎么处理 • php验证session 报错了解决办法 • 着急!快快快!!!!
    1/1

    PHP中文网