zoukankan      html  css  js  c++  java
  • php 自己写的好看的分页类

    自己写的一个分页类 ,不是很完整,个别没有做验证,但可以使用,分页效果见文章底部。除了链接数据库的代码没有粘贴上来,其他的都粘贴了。供学习使用~

      1 <?php
      2 /**
      3  * Created by PhpStorm.
      4  * User: Caoxt
      5  * Date: 15-7-3
      6  * Time: 上午10:03
      7  */
      8 class page {
      9     public $pageSize;  //每页显示的文章条数
     10     public $showPage;  //页数条显示的条数
     11     public $count;     //文章总条数
     12     public $page;      //当前页
     13     public $mergyStr; //存储页码的变量
     14     public $skip;    //跳转页开关,默认为false关闭
     15 
     16     //初始化参数
     17     public function __construct($count, $pageSize = 10, $showPage = 5, $currentPage = 1, $skip = false) {
     18         $this->pageSize = $pageSize;
     19         $this->showPage = $showPage;
     20         $this->count    = $count;
     21         $this->page     = $this->checkPage($currentPage);
     22         $this->mergyStr = '';
     23         $this->skip     = $skip;
     24     }
     25 
     26     //检查传递的$page的合法性
     27     public function checkPage($currentPage) {
     28          if($currentPage < 1 || empty($currentPage)) {
     29              $currentPage = 1;
     30          }
     31         if($currentPage > $this->totalPages()) {
     32             $currentPage = $this->totalPages();
     33         }
     34         return $currentPage;
     35     }
     36 
     37     //计算偏移量
     38     public function pageOffset() {
     39         return ($this->showPage-1)/2;
     40     }
     41 
     42     //计算总页数
     43     public function totalPages() {
     44         return ceil($this->count/$this->pageSize);
     45     }
     46 
     47     //获取页面URL
     48     public function getPageUrl() {
     49         $CurrentUrl = $_SERVER["REQUEST_URI"];
     50         $arrUrl     = parse_url($CurrentUrl);
     51         $urlQuery   = $arrUrl["query"];
     52 
     53         if($urlQuery){
     54             //print_r($this->page);
     55             $urlQuery  = preg_replace("/(^|&)page=/" . $this->page, "", $urlQuery);
     56             $CurrentUrl = str_replace($arrUrl["query"], $urlQuery, $CurrentUrl);
     57 
     58             if($urlQuery){
     59                 $CurrentUrl.="&page";
     60             }
     61             else $CurrentUrl.="page";
     62 
     63         } else {
     64             $CurrentUrl.="?page";
     65         }
     66 
     67         return $CurrentUrl;
     68     }
     69 
     70     //页码显示行
     71     public function GetPagerContent() {
     72         $start = 1;
     73         $end   = $this->totalPages();
     74         $this->mergyStr .= "<div class='page'>";
     75         if($this->page > 1) {
     76             $this->mergyStr .= " <a href='".$this->getPageUrl()."="."1'>首页</a>";
     77             $this->mergyStr  .= " <a href='".$this->getPageUrl()."=".($this->page-1)."'>上一页</a>";
     78         }else{
     79             $this->mergyStr .= " <span class='disable'>首页</span>";
     80             $this->mergyStr  .= " <span class='disable'>上一页</span>";
     81         }
     82 
     83         if($this->totalPages() > $this->showPage) {
     84             if($this->page > $this->pageoffset()+1) {
     85                 $this->mergyStr .= "...";
     86             }
     87 
     88             if($this->page > $this->pageoffset()) {
     89                 $start = $this->page-$this->pageoffset();
     90                 $end = $this->totalPages() > $this->page+$this->pageoffset() ? $this->page+$this->pageoffset() : $this->totalPages();
     91             }
     92             else{
     93                 $start = 1;
     94                 $end = $this->totalPages() > $this->showPage ? $this->showPage : $this->totalPages();
     95             }
     96 
     97             if($this->page + $this->pageoffset() > $this->totalPages()) {
     98                 $start = $start - ($this->page + $this->pageoffset() - $end);
     99             }
    100 
    101         }
    102 
    103         for($i=$start; $i<=$end; $i++) {
    104             if($i == $this->page) {
    105                 $this->mergyStr .= "<span class='current'>{$i}</span>";
    106             }else{
    107                 $this->mergyStr .= " <a href='".$this->getPageUrl()."=".$i."'>{$i}</a>";
    108             }
    109 
    110         }
    111 
    112         if($this->totalPages() > $this->showPage && $this->totalPages() > $this->page + $this->pageoffset()) {
    113             $this->mergyStr  .= "...";
    114         }
    115 
    116         if($this->page < $this->totalPages()) {
    117             $this->mergyStr .= " <a href='".$this->getPageUrl()."=".($this->page+1)."'>下一页</a>";
    118             $this->mergyStr .= " <a href='".$this->getPageUrl()."=".$this->totalPages()."'>尾页</a>";
    119         }else{
    120             $this->mergyStr .= " <span class='disable'>下一页</span>";
    121             $this->mergyStr  .= " <span class='disable'>尾页</span>";
    122         }
    123 
    124         $this->mergyStr .= " 共{$this->totalPages()}页";
    125 
    126         //显示跳转框
    127         if($this->skip == true) {
    128             $this->mergyStr .= $this->skipNumPage();
    129         }
    130 
    131         $this->mergyStr .= "</div>";
    132 
    133         print_r($this->mergyStr);
    134     }
    135 
    136     //跳转页
    137     public function skipNumPage() {
    138         $this->mergyStr .= "<form action='' method='get'>";
    139         $this->mergyStr .= "第<input type='text' name='page' style='30px; height:25px; border: 1px solid #aaaadd;'>页";
    140         $this->mergyStr .= "<input type='submit' value='查询' style='border: 1px solid #aaaadd; text-decoration: none; padding:4px 10px 4px 10px; ' >";
    141         $this->mergyStr .= "</form>";
    142     }
    143 
    144 }

    上面是类文件的所有代码,以下是调用实例:

    <?php
    //数据库链接,不写了
    
    //每页显示条数
    $pageSize = 10;
    //页码行显示的条数
    $showPage = 5;
    //当前页
    $page = isset($_GET['page']) ? $_GET['page'] : 1;
    
    //当前页显示的文章
    $sql = "select * from follow_trade_1 order by `follow_trade_id` asc limit ".($page-1)*$pageSize.",{$pageSize}";
    $query = mysql_query($sql);
    
    //计算总条数
    $sql_count = mysql_query("select count(*) from follow_trade_1");
    $query_count = mysql_fetch_row($sql_count);
    $count = $query_count[0];
    
    //实例化分页类
    require("page.php");
    $p = new page($count, $pageSize, $showPage, $page, true);
    
    //table里的文章数据
    echo "<table border='1' style='400px;'>";
    echo "<tr><td>follow_trade_id</td><td>follow_id</td></tr>";
    while($rs = mysql_fetch_assoc($query)) {
        echo "<tr><td>{$rs['follow_trade_id']}</td><td>{$rs['follow_id']}</td></tr>";
    }
    echo "</table>";
    
    //读取分页条
    $p->GetPagerContent();

    样式CSS:

    <style>
        div.page{text-align: left; margin-top: 10px;}
        div.page a{border: 1px solid #aaaadd; text-decoration: none; padding:2px 10px 2px 10px; margin: 2px;}
        div.page span.current{border: 1px solid #000099; background-color: #000099; padding: 4px 10px 4px 10px; margin: 2px; color: #fff; font-weight: bold;}
        div.page span.disable{border: 1px solid #eee; padding: 2px 5px 2px 5px; margin: 2px; color: #ddd;}
        div.page form{display: inline;}
    </style>

    效果如图所示:

  • 相关阅读:
    mixin混合
    python类内部调用自己的成员函数必须加self
    合并/取消合并单元格
    pandas 显示所有的行和列
    pandas 利用openpyxl设置表格样式
    Nowcoder9983G.糖果(并查集)
    Nowcoder9983F.匹配串(思维)
    Nowcoder9983E.买礼物(链表+线段树)
    Nowcoder9983C.重力追击(暴力+少用sqrt)
    Nowcoder9983B.内卷(双指针)
  • 原文地址:https://www.cnblogs.com/Caoxt/p/4619578.html
Copyright © 2011-2022 走看看