<?php /** * 分页类 * @author xyy * 调用分页实例 $subPages=new SubPages(数据总条数);//实例化分页类 * //$subPages->setEachDisNums(50);//设置每页显示多少条(可选) $limit = $subPages->getLimit();//生成用于sql的limit参数格式: 0,20 $show_pages = $subPages->show_SubPages();//显示分页 */ class SubPages{ private $each_disNums = 20;//每页显示的条目数 private $nums;//总条目数 private $current_page = 1;//当前被选中的页 private $sub_pages = 10;//每次显示的页数 private $pageNums;//总页数 private $page_array = array();//用来构造分页的数组 private $subPage_link;//每个分页的链接 private $subPage_type;//显示分页的类型 /* __construct是SubPages的构造函数,用来在创建类的时候自动运行. @$each_disNums 每页显示的条目数 @nums 总条目数 @current_num 当前被选中的页 @sub_pages 每次显示的页数 @subPage_link 每个分页的链接 @subPage_type 显示分页的类型 当@subPage_type=1的时候为普通分页模式 example: 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页] 当@subPage_type=2的时候为经典分页样式 example: 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页] */ public function __construct($nums,$subPage_type = 2){ $this->nums=intval($nums); if(isset($_GET["p"])){ $this->current_page=intval($_GET["p"]); } $this->pageNums=ceil($nums/$this->each_disNums); $this->subPage_link=$this->GetUri(); } /** * __destruct析构函数,当类不在使用的时候调用,该函数用来释放资源。 */ public function __destruct(){ unset($each_disNums); unset($nums); unset($current_page); unset($sub_pages); unset($pageNums); unset($page_array); unset($subPage_link); unset($subPage_type); } /** * 获取request_uri * @return type */ protected function GetUri() { $uri = $_SERVER['REQUEST_URI']; if(strstr($uri, '?p=') || strstr($uri, '&p=')) return preg_replace('/(?|&)p=d+/', '$1p=', $uri); if(strstr($uri, '?')) return $uri.'&p='; if(strstr($uri, '&')) return $uri.'?p='; return $uri.'?p='; } /** * 获取limit * @return type */ public function getLimit() { $start_num = ($this->current_page - 1) * $this->each_disNums; return "{$start_num},{$this->each_disNums}"; } /** * setEachDisNums 设置每页的显示的个数 * @param type $each_disNums */ public function setEachDisNums($each_disNums){ $this->each_disNums = intval($each_disNums); $this->pageNums=ceil($this->nums/$this->each_disNums); } /** * show_SubPages函数用在构造函数里面。而且用来判断显示什么样子的分页 * @param type $subPage_type * @return type */ public function show_SubPages($subPage_type = 2){ if($subPage_type == 1){ return $this->subPageCss1(); }elseif ($subPage_type == 2){ return $this->subPageCss2(); } } /** * 用来给建立分页的数组初始化的函数。 * @return type */ protected function initArray(){ for($i=0;$i<$this->sub_pages;$i++){ $this->page_array[$i]=$i; } return $this->page_array; } /** * construct_num_Page该函数使用来构造显示的条目 * 即使:[1][2][3][4][5][6][7][8][9][10] * @return type */ protected function construct_num_Page(){ if($this->pageNums < $this->sub_pages){ $current_array=array(); for($i=0;$i<$this->pageNums;$i++){ $current_array[$i]=$i+1; } }else{ $current_array=$this->initArray(); if($this->current_page <= 3){ for($i=0;$i<count($current_array);$i++){ $current_array[$i]=$i+1; } }elseif ($this->current_page <= $this->pageNums && $this->current_page > $this->pageNums - $this->sub_pages + 1 ){ for($i=0;$i<count($current_array);$i++){ $current_array[$i]=($this->pageNums)-($this->sub_pages)+1+$i; } }else{ for($i=0;$i<count($current_array);$i++){ $current_array[$i]=$this->current_page-2+$i; } } } return $current_array; } /** * 构造普通模式的分页 * 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页] * @return string */ protected function subPageCss1(){ $subPageCss1Str=""; $subPageCss1Str.="共".$this->nums."条记录,"; $subPageCss1Str.="每页显示".$this->each_disNums."条,"; $subPageCss1Str.="当前第".$this->current_page."/".$this->pageNums."页 "; if($this->current_page > 1){ $firstPageUrl=$this->subPage_link."1"; $prewPageUrl=$this->subPage_link.($this->current_page-1); $subPageCss1Str.="[<a href='$firstPageUrl'>首页</a>] "; $subPageCss1Str.="[<a href='$prewPageUrl'>上一页</a>] "; }else { $subPageCss1Str.="[首页] "; $subPageCss1Str.="[上一页] "; } if($this->current_page < $this->pageNums){ $lastPageUrl=$this->subPage_link.$this->pageNums; $nextPageUrl=$this->subPage_link.($this->current_page+1); $subPageCss1Str.=" [<a href='$nextPageUrl'>下一页</a>] "; $subPageCss1Str.="[<a href='$lastPageUrl'>尾页</a>] "; }else { $subPageCss1Str.="[下一页] "; $subPageCss1Str.="[尾页] "; } //echo $subPageCss1Str; return $subPageCss1Str; } /** * 构造经典模式的分页 * 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页] * @return string */ protected function subPageCss2(){ $subPageCss2Str=""; $subPageCss2Str.="当前第".$this->current_page."/".$this->pageNums."页 "; if($this->current_page > 1){ $firstPageUrl=$this->subPage_link."1"; $prewPageUrl=$this->subPage_link.($this->current_page-1); $subPageCss2Str.="[<a href='$firstPageUrl'>首页</a>] "; $subPageCss2Str.="[<a href='$prewPageUrl'>上一页</a>] "; }else { $subPageCss2Str.="[首页] "; $subPageCss2Str.="[上一页] "; } $a=$this->construct_num_Page(); for($i=0;$i<count($a);$i++){ $s=$a[$i]; if($s == $this->current_page ){ $subPageCss2Str.="[<span style='color:red;font-weight:bold;'>".$s."</span>]"; }else{ $url=$this->subPage_link.$s; $subPageCss2Str.="[<a href='$url'>".$s."</a>]"; } } if($this->current_page < $this->pageNums){ $lastPageUrl=$this->subPage_link.$this->pageNums; $nextPageUrl=$this->subPage_link.($this->current_page+1); $subPageCss2Str.=" [<a href='$nextPageUrl'>下一页</a>] "; $subPageCss2Str.="[<a href='$lastPageUrl'>尾页</a>] "; }else { $subPageCss2Str.="[下一页] "; $subPageCss2Str.="[尾页] "; } return $subPageCss2Str; } }