你好,欢迎访问我的博客!登录
当前位置:首页 - 技术 - 正文 君子好学,自强不息!

简单php分页类实现代码

2018-06-14 08:46:24技术admin27°c
A+ A-

下边我以用户表的例子讲解下。

<?php 

//获取此时你要显示的是第几页

$page =$_GET['p']; 

$pageSize=9;//每页显示数据的个数

$showPage=5;//在页码区域要显示的个数

简单php分页类实现代码

我的在这里显示的是5页每页显示9条数据。

$conn=mysql_connect("$mysql_server_name","$mysql_username","$mysql_password") ;

//这句的($page-1)*$pageSize 这个是你在执行sql时查询数据的起始位置,比如$qage = 1时,当前为第一页,就从第一条数据查询9条数据

$sql = "SELECT * FROM 同户表 order by 排序的字段 asc LIMIT ".($page-1)*$pageSize .",$pageSize";                   //SQL查询语句
$result=mysql_query($sql,$conn);

?>

在这里写上你的页面布局

<?php 

//得到 当前用户表里数据的总数
$total_sql="SELECT COUNT(*)FROM 用户表名";

$total_result=mysql_fetch_array(mysql_query($total_sql));
$total=$total_result[0];


//计算页数
$total_pages =ceil($total/$pageSize);
mysql_close($conn);
/**3显示数据+分页条**/
//计算偏移量
$pageoffset=($showPage-1)/2;


$page_banner="<div class='pageview' >";
//判断是否是第一页,如果是第一页的话这两个按钮可点击,否则不可点击
if($page > 1){
   $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p= 1 '' class='prev-link link' >首页</a>";
   $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."' class='prev-link link'><上一页</a>";
}
else{
     $page_banner.="<span class='prev-link link'> <a>首页</a></span>";
     $page_banner.="<span class='prev-link link'> <a><上一页</a></span>";
}
//初始化起始于结束的页码数据
$start=1;
$end = $total_pages;
/*只有在总页码数大于要展示的页码个数时才会执行为了显示页码的省略号*/

//此时如果点击在后几页,前边会显示省略号
if($total_pages >$showPage) {
    if($page >$pageoffset+1){
        $page_banner.="...";
    }


    //当页数大于2页时初始化开始与结束的页码
    if($page > $pageoffset){
      $start =$page - $pageoffset;
        $end=$total_pages > $page+$pageoffset ? $page+$pageoffset :$total_pages;
    }
    //当页码小于3时初始化开始与结束的页码
    else{
       $start=1;
       $end=$total_pages > $showPage ? $showPage : $total_pages;
    }
    if($page + $pageoffset > $total_pages){
       $start=$start-($page+$pageoffset-$end);
    }


//循环输出中间显示的页码
for($i=$start;$i<=$end;$i++){
    //定义当前页不可点击
    if($page==$i){ 
      $page_banner.="<span class ='link'>$i</span>";
  }else{  
     $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".$i."' class='link'>$i</a>";
  }
}


//页码数大于要显示的页码数时显示省略号   点击的页码在前边时显示后边的省略号
if($total_pages>$showPage&&$total_pages>$page+$pageoffset){
   $page_banner.="...";
}
//判断是否达到最后一页是否可显示
if($page <$total_pages){
$page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."' class='link next'>下一页></a>";
$page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($total_pages)."' class='link next'>尾页</a>";
}
else{
   $page_banner.="<span class ='disable'> <a>尾页</a></span>";
     $page_banner.="<span class ='link next'> <a>下一页></a></span>";
}


$page_banner.="共{$total_pages}页";
echo $page_banner;
?>

外加css

  .pageview{width:550px; margin: 40px auto; margin-right:409px;padding: 10px 0px;}

.pageview{width:550px; margin: 50px auto;}
.pageview {padding: 12px 0;text-align: center ;line-height: 26px;}
.pageview a{text-decoration: none;}
.pageview .link {display: inline-block;padding: 0 10px;color: #fff;background-color:#7eade5;border-radius: 3px;height: 27px;margin: 0 0 2px 3px;border: 0;cursor: pointer}
.pageview .hover,.pageview a.link:hover {background-color: #00adc6  }
.pageview .nub input {width: 55px;text-align: center;font: 700 12px/25px Arial;border: 1px solid #ddd;background-color: #fff; margin: 0 5px;}
.bigtit,.bigtit .h2,.rastbox .h2 { line-height: 40px  }
.pageview span.link { background-color: #ddd;  cursor: not-allowed}

可以理解为三个步骤:

 1) 连接数据库,在前端将数据显示出来 ;

 2)从前端传page(页码值)给php,这里也要判断符合范围内的页码:就是不小于1,不大于总页数;

 3)php获得页码,做出判断,进行相应-+操作,改变limit值。 ps:数据都是已经在数据库中建好的,这里php只负责连接。

<?php
    /**
        file: page.class.php
        完美分页类 Page
    */
    class Page {
        private $total;                         //数据表中总记录数
        private $listRows;                      //每页显示行数
        private $limit;                         //SQL语句使用limit从句,限制获取记录个数
        private $uri;                           //自动获取url的请求地址
        private $pageNum;                       //总页数
        private $page;                          //当前页  
        private $config = array(
                'head' => "条记录",
                'prev' => "上一页",
                'next' => "下一页",
                'first'=> "首页",
                'last' => "末页"
            );                 
        //在分页信息中显示内容,可以自己通过set()方法设置
        private $listNum = 10;                  //默认分页列表显示的个数
 
        /**
            构造方法,可以设置分页类的属性
            @param  int $total      计算分页的总记录数
            @param  int $listRows   可选的,设置每页需要显示的记录数,默认为25条
            @param  mixed   $query  可选的,为向目标页面传递参数,可以是数组,也可以是查询字符串格式
            @param  bool    $ord    可选的,默认值为true, 页面从第一页开始显示,false则为最后一页
         */
        public function __construct($total, $listRows=25, $query="", $ord=true){
            $this->total = $total;
            $this->listRows = $listRows;
            $this->uri = $this->getUri($query);
            $this->pageNum = ceil($this->total / $this->listRows);
            /*以下判断用来设置当前面*/
            if(!empty($_GET["page"])) {
                $page = $_GET["page"];
            }else{
                if($ord)
                    $page = 1;
                else
                    $page = $this->pageNum;
            }
 
            if($total > 0) {
                if(preg_match('/\D/', $page) ){
                    $this->page = 1;
                }else{
                    $this->page = $page;
                }
            }else{
                $this->page = 0;
            }
             
            $this->limit = "LIMIT ".$this->setLimit();
        }
 
        /**
            用于设置显示分页的信息,可以进行连贯操作
            @param  string  $param  是成员属性数组config的下标
            @param  string  $value  用于设置config下标对应的元素值
            @return object          返回本对象自己$this, 用于连惯操作
         */
        function set($param, $value){
            if(array_key_exists($param, $this->config)){
                $this->config[$param] = $value;
            }
            return $this;
        }
         
        /* 不是直接去调用,通过该方法,可以使用在对象外部直接获取私有成员属性limit和page的值 */
        function __get($args){
            if($args == "limit" || $args == "page")
                return $this->$args;
            else
                return null;
        }
         
        /**
            按指定的格式输出分页
            @param  int 0-7的数字分别作为参数,用于自定义输出分页结构和调整结构的顺序,默认输出全部结构
            @return string  分页信息内容
         */
        function fpage(){
            $arr = func_get_args(); //用户参数
 
            $html[0] = "<span class='p1'> 共<b> {$this->total} </b>{$this->config["head"]} </span>";
            $html[1] = " 本页 <b>".$this->disnum()."</b> 条 ";
             
            $html[2] = " 本页从 <b>{$this->start()}-{$this->end()}</b> 条 ";
             
            $html[3] = " <b>{$this->page}/{$this->pageNum}</b>页 ";
             
            $html[4] = $this->firstprev();
             
            $html[5] = $this->pageList();
             
            $html[6] = $this->nextlast();
             
            $html[7] = $this->goPage();
             
            $fpage = '<div style="font:12px \'\5B8B\4F53\',san-serif;">';
             
            if(count($arr) < 1)
                $arr = array(0, 1,2,3,4,5,6,7);
             
            for($i = 0; $i < count($arr); $i++)
                $fpage .= $html[$arr[$i]];
         
            $fpage .= '</div>';
            return $fpage;
        }
         
        /* 在对象内部使用的私有方法,*/
        private function setLimit(){
            if($this->page > 0)
                return ($this->page-1)*$this->listRows.", {$this->listRows}";
            else
                return 0;
        }
 
        /* 在对象内部使用的私有方法,用于自动获取访问的当前URL */
        private function getUri($query){   
            $request_uri = $_SERVER["REQUEST_URI"];
            $url = strstr($request_uri,'?') ? $request_uri :  $request_uri.'?';
             
            if(is_array($query))
                $url .= http_build_query($query);
            else if($query != "")
                $url .= "&".trim($query, "?&");
         
            $arr = parse_url($url);
 
            if(isset($arr["query"])){
                parse_str($arr["query"], $arrs);
                unset($arrs["page"]);
                $url = $arr["path"].'?'.http_build_query($arrs);
            }
             
            if(strstr($url, '?')) {
                if(substr($url, -1)!='?')
                    $url = $url.'&';
            }else{
                $url = $url.'?';
            }
             
            return $url;
        }
 
        /* 在对象内部使用的私有方法,用于获取当前页开始的记录数 */
        private function start(){
            if($this->total == 0)
                return 0;
            else
                return ($this->page-1) * $this->listRows+1;
        }
 
        /* 在对象内部使用的私有方法,用于获取当前页结束的记录数 */
        private function end(){
            return min($this->page * $this->listRows, $this->total);
        }
 
        /* 在对象内部使用的私有方法,用于获取上一页和首页的操作信息 */
        private function firstprev(){
            if($this->page > 1) {
                $str = " <a href='{$this->uri}page=1'>{$this->config["first"]}</a> ";
                $str .= "<a href='{$this->uri}page=".($this->page-1)."'>{$this->config["prev"]}</a> ";       
                return $str;
            }
 
        }
     
        /* 在对象内部使用的私有方法,用于获取页数列表信息 */
        private function pageList(){
            $linkPage = " <b>";
             
            $inum = floor($this->listNum/2);
            /*当前页前面的列表 */
            for($i = $inum; $i >= 1; $i--){
                $page = $this->page-$i;
 
                if($page >= 1)
                    $linkPage .= "<a href='{$this->uri}page={$page}'>{$page}</a> ";
            }
            /*当前页的信息 */
            if($this->pageNum > 1)
                $linkPage .= "<span style='padding:1px 2px;background:#BBB;color:white'>{$this->page}</span> ";
             
            /*当前页后面的列表 */
            for($i=1; $i <= $inum; $i++){
                $page = $this->page+$i;
                if($page <= $this->pageNum)
                    $linkPage .= "<a href='{$this->uri}page={$page}'>{$page}</a> ";
                else
                    break;
            }
            $linkPage .= '</b>';
            return $linkPage;
        }
 
        /* 在对象内部使用的私有方法,获取下一页和尾页的操作信息 */
        private function nextlast(){
            if($this->page != $this->pageNum) {
                $str = " <a href='{$this->uri}page=".($this->page+1)."'>{$this->config["next"]}</a> ";
                $str .= " <a href='{$this->uri}page=".($this->pageNum)."'>{$this->config["last"]}</a> ";
                return $str;
            }
        }
 
        /* 在对象内部使用的私有方法,用于显示和处理表单跳转页面 */
        private function goPage(){
                if($this->pageNum > 1) {
                return ' <input style="width:20px;height:17px !important;height:18px;border:1px solid #CCCCCC;" type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=\''.$this->uri.'page=\'+page+\'\'}" value="'.$this->page.'"><input style="cursor:pointer;width:25px;height:18px;border:1px solid #CCCCCC;" type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'page=\'+page+\'\'"> ';
            }
        }
 
        /* 在对象内部使用的私有方法,用于获取本页显示的记录条数 */
        private function disnum(){
            if($this->total > 0){
                return $this->end()-$this->start()+1;
            }else{
                return 0;
            }
        }
    }
  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
简单php分页类实现代码

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>


  用户登录