zoukankan      html  css  js  c++  java
  • 仿百度分页类

     1 <?php
     2 class Page
     3 {
     4     private $maxnum; //总数据条数
     5     private $num; //每页显示数条数
     6     private $page;//当前页
     7     private $pagenum; //总页数
     8     private $url; //url
     9     private $urlparam; //url参数
    10     private $startpage; //当前显示的最左页, 显示页码的区间
    11     private $endpage; //当前显示的最右页
    12     private $str = ''; //注意成员属性变量和方法内的普通变量的区别,作用域不同的,如果用普通变量,两个方法里的字符串没办法合到一起
    13 
    14     public function __construct($maxnum, $num)
    15     {
    16         $this->maxnum = $maxnum;
    17         $this->num = $num;
    18         $this->pagenum = ceil($this->maxnum/$this->num);
    19         $this->page = isset($_GET['page']) ? $_GET['page'] : 1;
    20         $this->url = $_SERVER['PHP_SELF']; //directory + filename
    21         $this->urlparam();
    22         $this->checkpage();
    23         // $this->pagemax();
    24     }
    25 
    26     public function urlparam()
    27     {
    28         foreach($_GET as $k=>$v){
    29             if($v != '' && $k != 'page'){
    30                 $this->urlparam .= $k.'='.$v.'&';
    31             }
    32         }
    33     }
    34 
    35     public function showpage()
    36     {
    37         // $str = '';
    38         $this->str .= '当前第'.$this->page.'页,共'.$this->pagenum.'页';
    39         $this->str .= '<a href="'.$this->url.'?'.$this->urlparam.'page=1">首页</a>';
    40         $this->str .= '<a href="'.$this->url.'?'.$this->urlparam.'page='.($this->page-1).'">上一页</a>';
    41         $this->pages();
    42         $this->str .= '<a href="'.$this->url.'?'.$this->urlparam.'page='.($this->page+1).'">下一页</a>';
    43         $this->str .= '<a href="'.$this->url.'?'.$this->urlparam.'page='.$this->pagenum.'">尾页</a>';
    44         return $this->str;
    45     }
    46 
    47     //当前显示页码的区间
    48     //...11 12 13 14 15 16 ...仿百度分页效果
    49     public function pages()
    50     {
    51         if($this->page <= 10){
    52             $this->startpage = 1;
    53         }else{
    54         //通过当前页除以10,在和1拼接,比如当前页15,经过这种方法处理就得到起始页为11.减1的目的是如果当前页是30,那么把他算作21那组 
    55             $this->startpage = floor(($this->page-1) / 10).'1'; //这块想要拼接只能使用string类型的1
    56         }
    57         $this->endpage = $this->startpage + 9; //只显示10个页码
    58         if($this->endpage >= $this->pagenum){
    59             $this->endpage = $this->pagenum; //
    60         }
    61         for($i=$this->startpage; $i<=$this->endpage; $i++){
    62             //注意这里的变量名必须和showpage()方法里的变量名相同,因为最终是和showpage里的字符串拼接
    63             // 还不行,变量作用域不同,即便起相同变量名也不行。只能使用成员属性变量的方式了
    64             if($this->page == $i)
    65                 $this->str .= '<a style="color:red;" href="'.$this->url.'?'.$this->urlparam.'page='.$i.'">'.$i.'</a>&nbsp;';
    66             else
    67                 $this->str .='<a href="'.$this->url.'?'.$this->urlparam.'page='.$i.'">'.$i.'</a>';
    68         } 
    69         return $this->str;  //单独把这个写成一个方法就是为了维护,如果用百度分页效果就调用,不需要就不调用
    70     }
    71 
    72     public function checkpage()
    73     {
    74         if($this->page >= $this->pagenum){
    75             $this->page = $this->pagenum;
    76         }
    77         if($this->page <= 1){
    78             $this->page = 1;
    79         }
    80     }
    81 
    82     public function limit()
    83     {
    84         $num = ($this->page-1) * $this->num;
    85         $limit = $num.','.$num;
    86         return $limit;
    87     }
    88 }
    89 
    90 $p = new page(90, 3);
    91 echo $p->showpage();

    部分内容参考:https://www.cnblogs.com/liangzia/p/10438263.html

    之前做的有点瑕疵,修改了一下。

      1 <?php
      2 class Page
      3 {
      4     private $maxnum; //总数据条数
      5     private $num; //每页显示数条数
      6     private $page;//当前页
      7     private $pagenum; //总页数
      8     private $url; //url
      9     private $urlparam; //url参数
     10     private $startpage; //当前显示的最左页, 显示页码的区间
     11     private $midpage; //当前显示页作为中间,比如13,那么左边显示8 9 10 11 12,右边显示14 15 16 17
     12     private $endpage; //当前显示的最右页
     13     private $str = ''; //注意成员属性变量和方法内的普通变量的区别,作用域不同的,如果用普通变量,两个方法里的字符串没办法合到一起
     14 
     15     public function __construct($maxnum, $num)
     16     {
     17         $this->maxnum = $maxnum;
     18         $this->num = $num;
     19         $this->pagenum = ceil($this->maxnum/$this->num);
     20         $this->page = isset($_GET['page']) ? $_GET['page'] : 1;
     21         $this->url = $_SERVER['PHP_SELF']; //directory + filename
     22         $this->urlparam();
     23         $this->checkpage();
     24         // $this->pagemax();
     25     }
     26 
     27     public function urlparam()
     28     {
     29         foreach($_GET as $k=>$v){
     30             if($v != '' && $k != 'page'){
     31                 $this->urlparam .= $k.'='.$v.'&';
     32             }
     33         }
     34     }
     35 
     36     public function showpage()
     37     {
     38         // $str = '';
     39         //if else判断首页尾页变灰
     40         $this->str .= '当前第'.$this->page.'页,共'.$this->pagenum.'页';
     41         if($this->page == 1){
     42             $this->str .= '<a style="color:#0f0;" href="'.$this->url.'?'.$this->urlparam.'page=1">首页</a>';
     43             $this->str .= '<a style="color:#0f0;" href="'.$this->url.'?'.$this->urlparam.'page='.($this->page-1).'">上一页</a>';
     44         }else{
     45             $this->str .= '<a href="'.$this->url.'?'.$this->urlparam.'page=1">首页</a>';
     46             $this->str .= '<a href="'.$this->url.'?'.$this->urlparam.'page='.($this->page-1).'">上一页</a>';
     47         }
     48         $this->pages();
     49         if($this->page == $this->pagenum){
     50             $this->str .= '<a style="color:#0f0;" href="'.$this->url.'?'.$this->urlparam.'page='.($this->page+1).'">下一页</a>';
     51             $this->str .= '<a style="color:#0f0;" href="'.$this->url.'?'.$this->urlparam.'page='.$this->pagenum.'">尾页</a>';
     52         }else{
     53             $this->str .= '<a href="'.$this->url.'?'.$this->urlparam.'page='.($this->page+1).'">下一页</a>';
     54             $this->str .= '<a href="'.$this->url.'?'.$this->urlparam.'page='.$this->pagenum.'">尾页</a>';
     55         }
     56         return $this->str;
     57     }
     58 
     59     //当前显示页码的区间
     60     //...11 12 13 14 15 16 ...仿百度分页效果
     61     public function pages()
     62     {
     63         if($this->page <= 10){
     64             $this->startpage = 1;
     65         }elseif($this->page >= ($this->pagenum-4)){
     66             //如果是到了最后10页范围内,那么
     67             $this->startpage = $this->page - (9-($this->pagenum-$this->page)); //pagenum-page是补齐10页所差的页数
     68             // 比如说共30页,当前28页,那么startpage就应该是28-(9-(30-28)),不然就不够10页
     69         }else{
     70         //通过当前页除以10,在和1拼接,比如当前页15,经过这种方法处理就得到起始页为11.减1的目的是如果当前页是30,那么把他算作21那组 
     71             $this->startpage = $this->page-5; // 
     72         }
     73         $this->endpage = $this->startpage + 9; //只显示10个页码
     74         if($this->endpage >= $this->pagenum){
     75             $this->endpage = $this->pagenum; //
     76         }
     77         for($i=$this->startpage; $i<=$this->endpage; $i++){
     78             //注意这里的变量名必须和showpage()方法里的变量名相同,因为最终是和showpage里的字符串拼接
     79             // 还不行,变量作用域不同,即便起相同变量名也不行。只能使用成员属性变量的方式了
     80             if($this->page == $i)
     81                 $this->str .= '<a style="color:red;" href="'.$this->url.'?'.$this->urlparam.'page='.$i.'">'.$i.'</a>&nbsp;&nbsp;&nbsp;';
     82             else
     83                 $this->str .='<a href="'.$this->url.'?'.$this->urlparam.'page='.$i.'">'.$i.'</a>&nbsp;&nbsp;&nbsp;';
     84         } 
     85         return $this->str;  //单独把这个写成一个方法就是为了维护,如果用百度分页效果就调用,不需要就不调用
     86     }
     87 
     88     public function checkpage()
     89     {
     90         if($this->page >= $this->pagenum){
     91             $this->page = $this->pagenum;
     92         }
     93         if($this->page <= 1){
     94             $this->page = 1;
     95         }
     96     }
     97 
     98     public function limit()
     99     {
    100         $num = ($this->page-1) * $this->num;
    101         $limit = $num.','.$num;
    102         return $limit;
    103     }
    104 }
    105 
    106 $p = new page(90, 3);
    107 echo $p->showpage();
    108 主要修改的是pages方法,其他不变,还有showpage方法加上了首页尾页不能点击上一页下一页的效果,使用变色代替。
    View Code

    补充:在显示尾页的时候,如果用户点击最后一页可能显示不够10个页码,需要判断,就是下面这个多加个表达式条件(多加红色部分)

    if($this->page >= ($this->pageNum - 4) && $this->page > 10){
       $this->startPage = $this->page - (9-($this->pageNum - $this->page));
    }

     普通分页类

    <?php
    //limit 参数:越过几条,查询几条
    class Page{
        //成员属性
        public $pageNum;  //每页显示条数
        public $page;     //当前页
        public $pageMax;  //最大页数
        public $maxNum;   //总条数
        public $url=null;  //当前页的地址
        public $urlParam='';  //当前页传参
    
        //成员方法
        public function __construct($maxNum,$pageNum=5){
            $this->maxNum=$maxNum;
            $this->pageNum=$pageNum;
            $this->page=isset($_GET['page'])?$_GET['page']:1;
            $this->url=$_SERVER['PHP_SELF'];
            $this->urlParam();
            $this->pageMax();
            $this->checkPage();
            //$this->pageMax();   这个放在后面就会出现逻辑错误 可怕  为什么呢?
        }
    
        private function urlParam(){
            foreach($_GET as $k=>$v){
                if($v!='' && $k!='page'){
                    $this->urlParam.='&'.$k.'='.$v;
                }
            }
        }
    
        private function pageMax(){
            $this->pageMax=ceil($this->maxNum/$this->pageNum);
        }
    
        public function showPage(){
            $str='';
            $str.='当前第'.$this->page.'页 共'.$this->pageMax.'页 共'.$this->maxNum.'条&nbsp';
            $str.='<a href="'.$this->url.'?page=1'.$this->urlParam.'">首页</a>&nbsp';
            $str.='<a href="'.$this->url.'?page='.($this->page-1).$this->urlParam.'">上一页</a>&nbsp';
            $str.='<a href="'.$this->url.'?page='.($this->page+1).$this->urlParam.'">下一页</a>&nbsp';
            $str.='<a href="'.$this->url.'?page='.$this->pageMax.$this->urlParam.'">尾页</a>';
            return $str;
        }
    
        private function checkPage(){
            if($this->page>$this->pageMax){
                $this->page=$this->pageMax;
            }
            if($this->page<1){
                $this->page=1;
            }
        }
    
        public function limit(){
            $num=($this->page-1)*$this->pageNum;  //越过的条数
            $limit=$num.','.$this->pageNum;
            return $limit;
        }
    }
    
    $page= new Page(50,5);
    //echo $page->limit();
    echo $page->showPage();
    View Code
  • 相关阅读:
    用JAVA发送一个XML格式的HTTP请求
    LR 测试http协议xml格式数据接口
    软件测试术语
    linux学习笔记
    接口测试文章整理
    InputStream只能读取一次的解决办法 C# byte[] 和Stream转换
    zTree更新自定义标签>>>
    C# 各类常见Exception 异常信息
    C# 调用存储过程 Sql Server存储过程 存储过程报错,程序中的try
    SQL Server 2014 清除用户名和密码
  • 原文地址:https://www.cnblogs.com/bneglect/p/11129373.html
Copyright © 2011-2022 走看看