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>

效果如图所示:

原文地址:https://www.cnblogs.com/Caoxt/p/4619578.html