PHP实现类似GOOGLE搜索结果的分页

网络整理 - 07-27

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。再有什么不明白的。给我留言即可。