+ -
当前位置:首页 → 问答吧 → 分页类,支持一个页面显示多个分页,更实用,更灵活!

分页类,支持一个页面显示多个分页,更实用,更灵活!

时间:2007-03-06

来源:互联网

<?
/**
* ***********************************************
* 分页类 VN-1.0
* Language: PHP5
* Author: YANG_YSB
* Date: 2007-3-6
* Description:
*      page($datanum=0,$pagestring="page")为分页类,支持一个页面显示多个分页,更实用,更灵活。
*   参数 var int $datanum为总数据量,参数 var string $pagestring 为传递页数的变量名称,类将返
*   回一个数组,其中包含("shuju_liang")数据量、("hangshou")每页显示数量、("yeshou")总页数、("
*   dangqiang_ye")当前页、(";PageOffset")偏移量开始和(";PageOnset")偏移量结束。显示“顶页,上一
*   页,下一页,尾页”的函数可以按自己的要求来写,例如: page_main($num=0,$hang=20,$str ="page")。
* Example:
* $p= new page(155,"b");
* $array=$p->_main(25));
*
*/
if(!isset($_PAGE_CLASS_)){
$_PAGE_CLASS_=true;
class page {
private //应用数据
   $shuju_liang,
   $yeshou=0,
   $dangqiang_ye=0,
   $canshu,
   $urlchanshu;
   
public  $PageOffset,
   $PageOnset,
   $hangshou=15;
   
function __construct($datanum=0,$pagestring="page"){ //构造函数
  $this->shuju_liang=$datanum;
  $this->canshu=$pagestring;
  $this->urlchanshu="";
}
function __destruct() { //析构函数
  unset($this->shuju_liang,
    $this->yeshou,
    $this->dangqiang_ye,
    $this->canshu,
    $this->urlchanshu,
    $this->;PageOffset,
    $this->PageOnset,
    $this->hangshou
   );
}

private function get_yeshou(){ //总页数
  if( !empty($this->shuju_liang) ){
         if( $this->shuju_liang < $this->hangshou ){  //如果总数据量小于行数,那么只有一页
          $this->yeshou = 1;
         }elseif($this->shuju_liang % $this->hangshou){ //取数据量除以行数的余数
          $this->yeshou = (int)($this->shuju_liang / $this->hangshou) + 1; //如果有余数,则页数等于数据量除以行数的结果取整再加一
         }else {
          $this->yeshou = $this->shuju_liang / $this->hangshou; //如果没有余数,则页数等于总数据量除以每页数的结果
         }
  }else{
   $this->yeshou = 1;
  }
}

public function get_urlchanshu($tiaozhuan_ye=0){ //取得页面传递的各种参数
  if($tiaozhuan_ye > $this->yeshou){
   $tiaozhuan_ye=$this->yeshou;
  }
  if(!empty($_SERVER["QUERY_STRING"])){
   $str=explode("&", $_SERVER["QUERY_STRING"]);
   foreach ($str as $v=>$u){
    if(ereg($this->canshu."=[[:digit:]]*",$u) or empty($u))unset($str[$v]);
   }
   if(!empty($tiaozhuan_ye))$str[]=$this->canshu."=".$tiaozhuan_ye;
   $url =count($str) >0? $_SERVER["PHP_SELF"]."?".implode("&", $str):$_SERVER["PHP_SELF"];
  }else{
   $url =empty($tiaozhuan_ye)?$_SERVER["PHP_SELF"] : $_SERVER["PHP_SELF"]."?".$this->canshu."=".$tiaozhuan_ye;
  }
  return $url;
}

private function get_diangqian_ye(){ //当前页编号
  if( isset($_REQUEST[$this->canshu]) ){
   $this->dangqiang_ye = intval( $_REQUEST[$this->canshu] );
   if($this->dangqiang_ye > $this->yeshou){
    $this->dangqiang_ye = $this->yeshou;
   }
   if($this->dangqiang_ye < 1){
    $this->dangqiang_ye=1;
   }
          }else{
               $this->dangqiang_ye = 1;
          }
}

private function get_PageOffset(){ //当前偏移量
  $this->PageOffset=( $this->dangqiang_ye - 1 ) * $this->hangshou;
}

private function get_PageOnset(){ //当前偏移量
  if($this->dangqiang_ye >= $this->yeshou){
   $this->PageOnset=$this->shuju_liang;
  }else{
   $this->PageOnset=$this->PageOffset+$this->hangshou;
  }
}

public function _main($hangshu=15){
  $this->hangshou=$hangshu;
  $this->get_yeshou();
  $this->get_diangqian_ye();
  $this->get_PageOffset();
  $this->get_PageOnset();
  return array("shuju_liang"=>$this->shuju_liang, //数据量
    "hangshou"=>$this->hangshou, //每页显示数量
    "yeshou"=>$this->yeshou, //总页数
    "dangqiang_ye"=>$this->dangqiang_ye, //当前页
    "PageOffset"=>$this->PageOffset, //偏移量开始
    "PageOnset"=>$this->PageOnset //偏移量结束
    );
}
}
/**
* *********************************************************
* 分页显示函数
*
* @param int $num 数据量
* @param int $hang 每页记录数
* @param string $str 当前页变量名
* @return string
* Example:
* $str = page_main(192,20,"d");
* echo $str;
*
*/
function page_main($num=0,$hang=20,$str="page"){
$p= new page($num,$str);
$arr=$p->_main($hang);
$s= "<div>数据量: {$arr['shuju_liang']}
    每页记录数:{$arr['hangshou']}
    当前页:{$arr['dangqiang_ye']}
    <a href=\"{$p->get_urlchanshu(1)}\">顶页</a>
    <a href=\"{$p->get_urlchanshu($arr['dangqiang_ye']-1)}\">上页</a>";
for($i=1;$i<=$arr['yeshou'];$i++){
  $s.= "<a href=\"".$p->get_urlchanshu($i)."\">$i</a> ";
}
$s.= "<a href=\"{$p->get_urlchanshu($arr['dangqiang_ye']+1)}\">下页</a>
    <a href=\"{$p->get_urlchanshu($arr['yeshou'])}\">尾页</a></div>";
$s.= "  <form id=\"form1\" name=\"form1\" method=\"post\" action=\"{$p->get_urlchanshu(0)}\">
      <input name=\"{$str}\" type=\"text\" size=\"1\" />
    <input type=\"submit\" name=\"Submit\" value=\"go\" />
  </form>";
unset($p,$arr);
return $s;
}
}//end _PAGE_CLASS_
?>

[ 本帖最后由 yang_ysb 于 2007-3-6 10:23 编辑 ]

作者: yang_ysb   发布时间: 2007-03-06

不错,收藏了!
:)

作者: luzhou   发布时间: 2007-03-18

收藏

作者: remote_addr   发布时间: 2007-03-20