页面

2011年5月22日

PHP分页列表类,函数

#wiki 一直都在用框架开发很少写这样的代码了,因为项目需要写了个分页 顺便发上来保存下。

class PageClass{
  
   public $PageSize;   //每页显示多少条,默认10条
   private $PageCount;   //统计页数
   private $DataCount;   //统计所有的记录
   private $Page;    //返回当前页数
   private $SqlStr;   //返回SQL代码,以便调试
  
   function __get($key){
    if(isset($this->$key)){
     return $this->$key;
    }
   } 
   function __construct($pagesize = 10){
    $this->PageSize = $pagesize;
   }
  
   #返回数据列表(2维数组),Sql:输入的查询语句,Page:获取page参数的值
   function ListData($Sql,$Page){
    $Count = mysql_query($Sql);
    $this->DataCount = mysql_num_rows($Count);
    //$mod = ($this->DataCount)%($this->PageSize);
    //$this->PageCount = (($mod==0)?(($this->DataCount)/($this->PageSize)):(($this->DataCount-$mod)/($this->PageSize)+1));
    $this->PageCount = ceil($this->DataCount/$this->PageSize);
    if($this->PageCount==0)return 0;
    $this->Page = $Page;
    if($this->Page>$this->PageCount)$this->Page = $this->PageCount;
    if($this->Page<1)$this->Page = 1;

    $this->SqlStr=$Sql." limit ".($this->PageSize*$this->Page-$this->PageSize).",".$this->PageSize;
    $Query = mysql_query($this->SqlStr);
    if($Query==Null){
     die(mysql_error());
    }else{
     while($tmp = mysql_fetch_array($Query)){
      $Data[] = $tmp;
     }
     return $Data;
    }
   }
  
   #输出{ 第一页 | 上一页 | 下一页 | 最后一页 },Parameters:url传递的参数
   function PrintPage($Parameters){
    if($this->PageCount<=1){
     echo('{ 第一页 | 上一页 | 下一页 | 最后一页 }');
    }else{
     if($this->Page>=2 && $this->Page<$this->PageCount){
      echo("{ <a href=?$Parameters&page=1>第一页<a> | <a href=?$Parameters&page=".($this->Page-1).">上一页</a> | <a href=?$Parameters&page=".($this->Page+1).">下一页</a> | <a href=?$Parameters&page=".$this->PageCount.">最后一页</a> }");
     }else{
      if($this->Page<2 && $this->Page<$this->PageCount){
       echo("{ 第一页 | 上一页 | <a href=?$Parameters&page=".($this->Page+1).">下一页</a> | <a href=?$Parameters&page=".$this->PageCount.">最后一页</a> }");
      }else{
       echo("{ <a href=?$Parameters&page=1>第一页<a> | <a href=?$Parameters&page=".($this->Page-1).">上一页</a> | 下一页 | 最后一页 }");
      }
     }
    }
    echo '<span style="margin:0 15px;"></span>共<span>'.$this->PageCount.'</span>页 | 每页显示<span>'.$this->PageSize.'</span>条 | 当前第<span>'.$this->Page.'</span>页';
   }

}

DEMO:

$P = new PageClass(10) //创建个对象,初始化PageSIze=10
//也可 $P->PageSize=10 设置显示条数
$Data = $P->ListDate("Select * From News",$_REQUEST['page']); //返回列表数据

//循环输出记录
$i=0;
while($i<count($Data)){
       echo $Data[i]['title']; //输出标题
}

$P->PrintPage("pid=1&cid=1"); //输出上页下也代码

//也自己写成其他样式的。。。
echo $P->PageSIze;
echo $P->Pagecount;
echo $P->DataCount;

没有评论: