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; //(后面程序略) */ ?>