一个简单且很好用的php分页类

  

复制代码 代码如下:

  class Page {

  // 分页栏每页显示的页数

  public $rollPage = 6;

  // 页数跳转时要带的参数

  public $parameter  ;

  // 默认列表每页显示行数

  public $listRows = 20;

  // 起始行数

  public $firstRow ;

  // 分页总页面数

  protected $totalPages  ;

  // 总行数

  protected $totalRows  ;

  // 当前页数

  protected $nowPage    ;

  // 分页的栏的总页数

  protected $coolPages   ;

  // 分页显示定制

  protected $config  = array(

  'redirect'=>false,

  'header'=>'条记录',

  'prev'=>'上一页',

  'next'=>'下一页',

  'first'=>'1',

  'last'=>'最后一页',

  'theme'=>' <div class="part1">%upPage% %first%  %prePage%  %linkPage%  %nextPage% %downPage%</div> <div class="part2">共  %totalPage% 页');

  // 默认分页变量名

  protected $varPage;

  /**

  +----------------------------------------------------------

  * 架构函数

  +----------------------------------------------------------

  * @access public

  +----------------------------------------------------------

  * @param array $totalRows  总的记录数

  * @param array $listRows  每页显示记录数

  * @param array $parameter  分页跳转的参数

  +----------------------------------------------------------

  */

  public function __construct($totalRows,$listRows='',$parameter='') {

  $this->totalRows = $totalRows;

  $this->parameter = $parameter;

  $this->varPage = C('VAR_PAGE') ? C('VAR_PAGE') : 'p' ;

  if(!empty($listRows)) {

  $this->listRows = intval($listRows);

  }

  $this->totalPages = ceil($this->totalRows/$this->listRows);     //总页数

  $this->coolPages  = ceil($this->totalPages/$this->rollPage);

  //$_GET验证

  $this->nowPage = intval($_GET[$this->varPage]);

  $this->nowPage = $this->nowPage > 0 ? $this->nowPage : 1;

  if(!empty($this->totalPages) && $this->nowPage>$this->totalPages) {

  $this->nowPage = $this->totalPages;

  }

  $this->firstRow = $this->listRows*($this->nowPage-1);

  }

  public function setConfig($name,$value) {

  if(isset($this->config[$name])) {

  $this->config[$name]    =   $value;

  }

  }

  /**

  +----------------------------------------------------------

  * 分页显示输出

  +----------------------------------------------------------

  * @access public

  +----------------------------------------------------------

  */

  public function show() {

  if(0 == $this->totalRows) return '';

  //处理参数

  $p = $this->varPage;

  $url  =  $_SERVER['REQUEST_URI'].(strpos($_SERVER['REQUEST_URI'],'?')?'':"?").$this->parameter;

  $parse = parse_url($url);

  if(isset($parse['query'])) {

  parse_str($parse['query'],$params);

  unset($params[$p]);

  $url   =  $parse['path'].'?'.http_build_query($params);

  }

  /* 分页逻辑  */

  //当总数小于显示的页码数

  if ($this->totalPages <= $this->rollPage) {

  $start = 1;

  $end   = $this->totalPages;

  }

  else{

  //

  if  ($this->nowPage <= $this->rollPage - 1) {

  $start = 1;

  $end   = $this->rollPage;

  $islast = true;

  }

  else if ($this->nowPage > $this->totalPages - $this->rollPage + 1) {

  $start = $this->totalPages - ($this->rollPage - 1);

  $end   = $this->totalPages;

  $isfirst = true;

  }

  else{

  //浮动数

  $size = floor($this->rollPage / 2);

  $start = $this->nowPage - $size;

  $end   = $this->nowPage + $size;

  $isfirst = true;

  $islast = true;

  }

  }

  //上下翻页字符串

  $upRow   = $this->nowPage - 1;

  $downRow = $this->nowPage + 1;

  /* 拼装HTML */

  //< 1...     ...last >

  if ($isfirst){

  $theFirst = "<a class='firstPage' href='".$url."&".$p."=1' >".$this->config['first']."</a>";

  }

  if ($islast){

  $theEnd = "<a class='lastPage' href='".$url."&".$p."=$this->totalPages' >".$this->config['last']."</a>";

  }

  if ($upRow > 0){

  $upPage = "<a class='upPage' href='".$url."&".$p."=$upRow'>".$this->config['prev']."</a>";

  }

  if ($downRow <= $this->totalPages){

  $downPage = "<a class='downPage' href='".$url."&".$p."=$downRow'>".$this->config['next']."</a>";

  }

  if($start==3){

  $linkPage .= "<a href='".$url."&".$p."=2'>2</a>";

  }

  if($start>=4){

  $linkPage .= "<a href='".$url."&".$p."=2'>2</a> <span class='noEndClass'>...</span>";

  }

  //1 2 3 4 5

  for($i=$start;$i<=$end;$i++){

  if($i!=$this->nowPage){

  $linkPage .= " <a href='".$url."&".$p."=$i'> ".$i." </a>";

  }else{

  $linkPage .= " <span class='current'>".$i."</span>";

  }

  if($i==$end){

  if($i<$this->totalRows){

  $linkPage .= " <span class='noEndClass'>...</span>";

  }

  }

  }

  $pageStr = str_replace(

  array('%header%','%nowPage%','%totalRow%','%totalPage%','%upPage%','%first%','%prePage%','%linkPage%','%nextPage%','%downPage%','%end%'),

  array($this->config['header'],$this->nowPage,$this->totalRows,$this->totalPages,$upPage,$theFirst,$prePage,$linkPage,$nextPage,$downPage,$theEnd),$this->config['theme']);

  //显示模式  普通false 带跳转ture

  if (!empty($this->config['redirect'])){

  $html = $pageStr;

  }else{

  //传递参数

  if($this->totalPages > 1){

  $redirect = " 到第 <form method='get' action=''><input name=".$p." type='text' class='page_text' size='3' maxlength='3' value='" . $this->nowPage ."'/> 页 <input type='submit' class='page_btn' value='确定' />";

  if ($params){

  foreach($params as $k => $v){

  $string .= "<input type='hidden' name='" . $k . "' value='" . $v . "'/>";

  }

  $redirect = $redirect . $string . '</form></div>';

  }else{

  $redirect = $redirect . '</form></div>';

  }

  }

  //生成Html字符串

  $html = $pageStr . $redirect;

  }

  return $html;

  }

  }