PHP分页类集锦
分页类一
<?php
/**
分页类
修改:Silence
Creatdate:2006-5-30
LastModify:2009-5-31
使用方法
$page=newpage($result,20);//$result为返回记录集数组,20为返回每页条数
$index=$page->GetIndexBar().$page->GetPageInfo();
print_r($result);
echo\"<br><br>\";
echo\"<center>\".$index.\"</center>\";
*/
classPage{
private$mTotalRowsNum=0;//总信息行数
private$mCurPageNumber=1;//当前所在页
private$mTotalPagesNum=1;//总页数
private$mQueryString;//页面传递的数据(url?后的字符串)
private$mPageRowsNum=20;//每页显示行数
private$mIndexBarLength=11;//索引条的页数
private$mIndexBar='';//页码索引条
private$mPageInfo='';//分页信息
//页码索引条样式
private$mNextButton=\"<fontstyle=\\"font-family:webdings\\">8</font>\";
private$mPreButton=\"<fontstyle=\\"font-family:webdings\\">7</font>\";
private$mFirstButton=\"<fontstyle=\\"font-family:webdings\\">9</font>\";
private$mLastButton=\"<fontstyle=\\"font-family:webdings\\">:</font>\";
private$mCssIndexBarCurPage=\"font-weight:bold;color:#FF0000\";
private$mCssIndexBarPage='';
//分页信息样式
private$mCssPageInfoNumFont='color:#FF0000';
private$mCssPageInfoFont='';
//构造方法
publicfunction__construct(&$rSqlQuery,$userPageRowsNum=''){
if(!is_array($rSqlQuery)){
$this->SetDbPageBreak($rSqlQuery,$userPageRowsNum);
}else{
$this->SetArrayPageBreak($rSqlQuery,$userPageRowsNum);
}
}
//设置数据库型分页
privatefunctionSetDbPageBreak(&$rSqlQuery,$userPageRowsNum=''){
$this->SetDbTotalRowsNum($rSqlQuery);
$this->SetTotalPagesNum($userPageRowsNum);
if($this->mTotalPagesNum>1){
$this->SetCurPageNumber();
$this->SetSqlQuery($rSqlQuery);
$this->SetQueryString();
$this->SetIndexBar();
$this->SetPageInfo();
}
}
//设置数组型分页
privatefunctionSetArrayPageBreak(&$rArray,$userPageRowsNum='',$userTotalRowsNum=''){
$this->SetArrayTotalRowsNum($rArray,$userTotalRowsNum);
$this->SetTotalPagesNum($userPageRowsNum);
if($this->mTotalPagesNum>1){
$this->SetCurPageNumber();
$this->SetArray($rArray);
$this->SetQueryString();
$this->SetIndexBar();
$this->SetPageInfo();
}
}
//数据库型计算总行数
privatefunctionSetDbTotalRowsNum($rSqlQuery){
$this->mTotalRowsNum=mysql_num_rows(mysql_query($rSqlQuery));
}
//数组型计算总行数
privatefunctionSetArrayTotalRowsNum($array){
$this->mTotalRowsNum=count($array);
}
//计算总页数
privatefunctionSetTotalPagesNum($userPageRowsNum=''){
if($userPageRowsNum){
$this->mPageRowsNum=$userPageRowsNum;
}
$this->mTotalPagesNum=(int)(floor(($this->mTotalRowsNum-1)/$this->mPageRowsNum)+1);
}
//计算当前页数
privatefunctionSetCurPageNumber(){
if($_GET['page']){
$this->mCurPageNumber=$_GET['page'];
}
}
//修正Sql截取语句
privatefunctionSetSqlQuery(&$rSqlQuery){
$start_number=($this->mCurPageNumber-1)*$this->mPageRowsNum;
$rSqlQuery.=\"LIMIT\".$start_number.\",\".$this->mPageRowsNum;
}
//修正截取后的Array
privatefunctionSetArray(&$rArray){
$start_number=($this->mCurPageNumber-1)*$this->mPageRowsNum;
$rArray=array_slice($rArray,$start_number,$this->mPageRowsNum);
}
//修正$_GET传递数据
privatefunctionSetQueryString(){
$query_string=$_SERVER['QUERY_STRING'];
if($query_string==''){
$this->mQueryString=\"?page=\";
}else{
$this->mQueryString=preg_replace(\"/&?page=\d+/\",'',$query_string);
$this->mQueryString=\"?\".$this->mQueryString.\"&page=\";
}
}
//设置页码索引条
privatefunctionGetPageIndex(){
if($this->mTotalPagesNum<=$this->mIndexBarLength){
$first_number=1;
$last_number=$this->mTotalPagesNum;
}else{
$offset=(int)floor($this->mIndexBarLength/2);
if(($this->mCurPageNumber-$offset)<=1){
$first_number=1;
}elseif(($this->mCurPageNumber+$offset)>$this->mTotalPagesNum){
$first_number=$this->mTotalPagesNum-$this->mIndexBarLength+1;
}else{
$first_number=$this->mCurPageNumber-$offset;
}
$last_number=$first_number+$this->mIndexBarLength-1;
}
$last_number;
for($i=$first_number;$i<=$last_number;$i++){
if($this->mCurPageNumber==$i){
$page_index.=\"<fontstyle='\".$this->mCssIndexBarCurPage.\"'>\".$i.\"</font>\";
}else{
$page_index.=\"<ahref='\".$this->mQueryString.$i.\"'style='\".$this->mCssIndexBarPage.\"'>\".$i.\"</a>\";
}
}
return$page_index;
}
//设置页码索引条
privatefunctionSetIndexBar(){
$this->mIndexBar=$this->GetNavFirstButton();
$this->mIndexBar.=$this->GetNavPreButton();
$this->mIndexBar.=$this->GetPageIndex();
$this->mIndexBar.=$this->GetNavNextButton();
$this->mIndexBar.=$this->GetNavLastButton();
}
//得到页码索引条首页按钮
privatefunctionGetNavFirstButton(){
return\"<ahref='\".$this->mQueryString.\"1'>\".$this->mFirstButton.\"</a>\";
}
//得到页码索引条上一页按钮
privatefunctionGetNavPreButton(){
if($this->mCurPageNumber>1){
$pre_number=$this->mCurPageNumber-1;
}else{
$pre_number=1;
}
return\"<ahref='\".$this->mQueryString.$pre_number.\"'>\".$this->mPreButton.\"</a>\";
}
//得到页码索引条下一页按钮
privatefunctionGetNavNextButton(){
if($this->mCurPageNumber<$this->mTotalPagesNum){
$next_number=$this->mCurPageNumber+1;
}else{
$next_number=$this->mTotalPagesNum;
}
return\"<ahref='\".$this->mQueryString.$next_number.\"'>\".$this->mNextButton.\"</a>\";
}
//得到页码索引条末页按钮
privatefunctionGetNavLastButton(){
return\"<ahref='\".$this->mQueryString.$this->mTotalPagesNum.\"'>\".$this->mLastButton.\"</a>\";
}
//设置分页信息
privatefunctionSetPageInfo(){
$this->mPageInfo=\"<fontstyle='\".$this->mCssPageInfoFont.\"'>\";
$this->mPageInfo.=\"共<fontstyle='\".$this->mCssPageInfoNumFont.\"'>\".$this->mTotalRowsNum.\"</font>条信息|\";
$this->mPageInfo.=\"<fontstyle='\".$this->mCssPageInfoNumFont.\"'>\".$this->mPageRowsNum.\"</font>条/页|\";
$this->mPageInfo.=\"共<fontstyle='\".$this->mCssPageInfoNumFont.\"'>\".$this->mTotalPagesNum.\"</font>页|\";
$this->mPageInfo.=\"第<fontstyle='\".$this->mCssPageInfoNumFont.\"'>\".$this->mCurPageNumber.\"</font>页\";
$this->mPageInfo.=\"</font>\";
}
//取出页码索引条
publicfunctionGetIndexBar(){
return$this->mIndexBar;
}
//取出分页信息
publicfunctionGetPageInfo(){
return$this->mPageInfo;
}
//释放类
function__destruct(){
}
}
?>
分页类二
<?php
/*
*Createdon2007-6-8
*Programmer:Alan,Msn-haowubai@hotmail.com
*KeBeKe.comDevelopaprojectPHP-MySQL-Apache
*Window-Preferences-PHPeclipse-PHP-CodeTemplates
*/
//为了避免重复包含文件而造成错误,加了判断函数是否存在的条件:
if(!function_exists(pageft)){
//定义函数pageft(),三个参数的含义为:
//$totle:信息总数;
//$displaypg:每页显示信息数,这里设置为默认是20;
//$url:分页导航中的链接,除了加入不同的查询信息“page”外的部分都与这个URL相同。
//默认值本该设为本页URL(即$_SERVER["REQUEST_URI"]),但设置默认值的右边只能为常量,所以该默认值设为空字符串,在函数内部再设置为本页URL。
functionpageft($totle,$displaypg=20,$url=''){
//定义几个全局变量:
//$page:当前页码;
//$firstcount:(数据库)查询的起始项;
//$pagenav:页面导航条代码,函数内部并没有将它输出;
//$_SERVER:读取本页URL“$_SERVER["REQUEST_URI"]”所必须。
global$page,$firstcount,$pagenav,$_SERVER;
//为使函数外部可以访问这里的“$displaypg”,将它也设为全局变量。注意一个变量重新定义为全局变量后,原值被覆盖,所以这里给它重新赋值。
$GLOBALS["displaypg"]=$displaypg;
if(!$page)$page=1;
//如果$url使用默认,即空值,则赋值为本页URL:
if(!$url){$url=$_SERVER["REQUEST_URI"];}
//URL分析:
$parse_url=parse_url($url);
$url_query=$parse_url["query"];//单独取出URL的查询字串
if($url_query){
//因为URL中可能包含了页码信息,我们要把它去掉,以便加入新的页码信息。
//这里用到了正则表达式,请参考“PHP中的正规表达式”
$url_query=ereg_replace("(^|&)page=$page","",$url_query);
//将处理后的URL的查询字串替换原来的URL的查询字串:
$url=str_replace($parse_url["query"],$url_query,$url);
//在URL后加page查询信息,但待赋值:
if($url_query)$url.="&page";else$url.="page";
}else{
$url.="?page";
}
//页码计算:
$lastpg=ceil($totle/$displaypg);//最后页,也是总页数
$page=min($lastpg,$page);
$prepg=$page-1;//上一页
$nextpg=($page==$lastpg?0:$page+1);//下一页
$firstcount=($page-1)*$displaypg;
//开始分页导航条代码:
$pagenav="显示第<B>".($totle?($firstcount+1):0)."</B>-<B>".min($firstcount+$displaypg,$totle)."</B>条记录,共$totle条记录";
//如果只有一页则跳出函数:
if($lastpg<=1)returnfalse;
$pagenav.="<ahref='$url=1'>首页</a>";
if($prepg)$pagenav.="<ahref='$url=$prepg'>前页</a>";else$pagenav.="前页";
if($nextpg)$pagenav.="<ahref='$url=$nextpg'>后页</a>";else$pagenav.="后页";
$pagenav.="<ahref='$url=$lastpg'>尾页</a>";
//下拉跳转列表,循环列出所有页码:
$pagenav.="到第<selectname='topage'size='1'onchange='window.location=\"$url=\"+this.value'>\n";
for($i=1;$i<=$lastpg;$i++){
if($i==$page)$pagenav.="<optionvalue='$i'selected>$i</option>\n";
else$pagenav.="<optionvalue='$i'>$i</option>\n";
}
$pagenav.="</select>页,共$lastpg页";
}
}
//-------------------------具体演示举例------------------------------- /* //(前面程序略) include("pageft.php");//包含“pageft.php”文件 //取得总信息数 $result=mysql_query("select*frommytable"); $total=mysql_num_rows($result); //调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉)。 pageft($total,10); //现在产生的全局变量就派上用场了: $result=mysql_query("select*frommytablelimit$firstcount,$displaypg"); while($row=mysql_fetch_array($result)){ //(列表内容略) } //输出分页导航条代码: echo$pagenav; //(后面程序略) */ ?>