PHP实现类似GOOGLE搜索结果的分页
function reterPageStr($pageSize,$curPage,$countSql,$pagePara)
{
// 返回字符串 rsStart||pageStr
if($rsResult=mysql_query($countSql)) $rsCount=mysql_result($rsResult,0,0) ;
$pageCount=ceil($rsCount/$pageSize);
if (!isset($curPage)) $curPage=1;
if($curPage<1) $curPage=1;
if($curPage>$pageCount) $curPage=$pageCount;
$rsStart=($curPage-1)*$pageSize;
$pageStr=outPageList($pageCount,$curPage,$pagePara);
$outStr=$rsStart."||". $pageCount."||".$pageStr."||".$rsCount;
return $outStr;
}
function outPageList($pageCount,$curPage,$pagePara)
{
if($pageCount>1)
{
$pageListNum=10;
$step=5;
$pageStr="";
$prePage=$curPage-1;
$nextPage=$curPage+1;
$pageFromNum=$curPage-$step;
$pageToNum=$curPage+$step;
if($pageCount<$step)
{
$pageFromNum=1;
$pageToNum=$pageCount;
}elseif($pageCount<$pageListNum)
{
$pageFromNum=1;
$pageToNum=$pageCount;
}
elseif($pageToNum>$pageCount)
{
$pageToNum=$pageCount;
if(($pageToNum-$pageFromNum)<$pageListNum)
{
$pageFromNum=$pageToNum-$pageListNum+1;
}
}else
{
if($pageFromNum<1)
{
$pageFromNum=1;
$pageToNum=$curPage+$step-1;
}
}
$pageStr.='
<script language="javascript">
function fucCheckNUM(obj){
var patn = /^\d+(\.\d+)?$/;
if(!patn.test(obj.value))
{
obj.value="1";
return false;
}
return true;
}
function locationPage(url)
{
var pageNum=document.getElementById("curPage").value;
var urlto=url+"&curPage="+pageNum;
window.location=urlto;
}
script>
';
/*开始输出 */
$pageStr.="
<style>
/*分页样式*/
.PageClass{font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; padding-top:0px;text-align:left;margin-top:2px; line-height:22px; height:22px;}
.PageClass ul{ float:left;}
.PageClass ul li{ margin-right:3px; float:left;}
.PageClass ul li a{border:1px solid #d8dfef; color:#01669A; text-decoration:none;padding:1px 4px;width:20px; height:15px;}
.PageClass ul li a:hover{ color:#fe6601;text-decoration:none; border:1px solid #d8dfef;padding:1px 4px; height:18px;}
style>
<div class=\"PageClass\">
<ul>
<li><strong>".$curPage."/".$pageCount." strong>li>
ul>";
if($curPage!=1){
$pageStr.="
<ul>
<li>
<a href=?curPage=1".$pagePara.">首页a> <a href=?curPage=$prePage&".$pagePara.">上一页a>
li>
ul>";
}
$pageStr.="<ul>";
for($i=$pageFromNum;$i<=$pageToNum;$i++){
$pageStr.="<li>";
if($curPage==$i){
$pageStr.=$i;
}else{
$pageStr.="<a href=?curPage=$i&".$pagePara.">$ia>";
}
$pageStr.="li>";
}
$pageStr.="ul>";
if($curPage!=$pageCount){
$pageStr.="<ul><li>";
$pageStr.="<a href=?curPage=$nextPage".$pagePara.">下一页a> <a href=?curPage=$pageCount&".$pagePara.">末页a>";
$pageStr.="li>ul>";
}
$url="?url=a&".$pagePara;
$pageStr.='<ul>
<input type="text" id="curPage" name="curPage" value="'.$curPage.'" onBlur="fucCheckNUM(this)" style="width:30px;border:1px solid #000;"/>
';
$pageStr.="
<input type=\"button\" value=\"Go\" onclick=\"locationPage('".$url."')\" style=\"line-height:20px;border:1px solid #000; width:25px;height:20px;\"/>";
$pageStr.='ul>';
$pageStr.="div>";
return $pageStr;
}
}
如上所示。
调用的时候只是需要调用
reterPageStr($pageSize,$curPage,$countSql,$pagePara)
这个函数即可。
返回的的是个字符串,以"||"分割开的。
$outStr=$rsStart."||". $pageCount."||".$pageStr."||".$rsCount;
$rsStart 是用来读取数据库的时候 limit 后面的参数
$pageCount 是表示共有多少页码
$pageStr 即是输出的 页码。
$rsCount 是记录总数。
调用的示例如下
$countSql="select count(Com_ID) from CommentList ";
$pageSize="20";
$curPage=$_GET['curPage'];
$UrlPara="&Com_TypeID=$Com_TypeID&Com_Type=$Com_Type ";
$pageOutStr=reterPageStr($pageSize,$curPage,$countSql,$UrlPara);
$pageOutStrArr=explode("||",$pageOutStr);
$rsStart=$pageOutStrArr[0];
$pageStr=$pageOutStrArr[2];
$sql="select Com_ID,Com_Type from CommentList order by Com_ID desc limit $rsStart,$pageSize ";
在这里,$UrlPara 是 在地址的问号后面的参数
比如地址是 ?curPage=2&type=a 则 $UrlPara="&type=a";
OK。再有什么不明白的。给我留言即可。