您的位置:首页 > 编程语言 > PHP开发

简单实现PHP分页

2013-06-03 22:57 369 查看
php+mysql分页是所有开发语言最简单的。但是性能不是太行,不过既然用mysql做站,那么其实也不用太在意。

这里涉及到几个函数

1、 CTL_PageBar_Show 通过传入总条数和页码以及页尺寸 返回对应的html.里面拼接的html可以自己改,也可以用模板的方式扩展,反正想怎么搞就怎么搞。

function CTL_PageBar_Show($allcount,$p=1,$pagesize=20,$maxpage=10)
{
//$allcount代表一共有多少条,理论上你要用select count(*) 的方式计算出, $p=1代表当前页码默认是第一页,$pagesize代表每页显示多少条,$maxpage代表每一页中最多显示几页
$pagenum=1;

if($allcount>$pagesize)  //计算出 共多少页
{
if(($allcount%$pagesize)>0)
{
$pagenum=ceil($allcount/$pagesize);
}
else
$pagenum=intval($allcount/$pagesize);
}

//每次最多显示 默认10页
$startpage=1;
$endpage=$maxpage;
if($pagenum<$maxpage) $endpage=$pagenum;
if($p>$pagenum) $p=1; //当前页码 大于总页码数 是不允许的,直接令其为1
if($p>$maxpage)
{
$countpage=(($p/$maxpage)+1)*$maxpage; //计算当前页所属 页码段的最大值
if($countpage>$pagenum)
$countpage=$pagenum;

$halfmaxpage=$maxpage/2;

if($p+$halfmaxpage>$countpage)
{
$endpage=$countpage;
}
else
$endpage=$p+$halfmaxpage;

$startpage= $p-$halfmaxpage;

}
$pagebar_result="";
$pagebar_result="<a href='".UpdateParams($_SERVER["REQUEST_URI"],"p","1")."'>首 页</a>  ";

if($p>1)
$pagebar_result.="<a href='".UpdateParams($_SERVER["REQUEST_URI"],"p",$p-1)."'>上一页</a> 第";
else
$pagebar_result.= "第";
for($i=$startpage;$i<=$endpage;$i++)
{
if($i==$p)
$pagebar_result.= "  <a href='".UpdateParams($_SERVER["REQUEST_URI"],"p",$i)."'><font color='red'>[".$i."]</font></a>  ";
else
$pagebar_result.= "  <a href='".UpdateParams($_SERVER["REQUEST_URI"],"p",$i)."'>[".$i."]</a>  ";
}
if($p<$pagenum)
$pagebar_result.= "页 <a href='".UpdateParams($_SERVER["REQUEST_URI"],"p",$p+1)."'>下一页</a> ";
else
$pagebar_result.= "页";
$pagebar_result.= "  <a href='".UpdateParams($_SERVER["REQUEST_URI"],"p",$pagenum)."'>末 页</a> ";
return $pagebar_result;
}


2、UpdateParams 更新参数函数,这个自定义函数挺有用。

譬如 $url=www.shengyisyn.org/a.php 如果UpdateParams($url,”page”,1);

则$url的值就会变成
www.shengyisyn.org/a.php?page=1;

同样的,如果 $url=UpdateParams($url,”bb”,’hello’);

那么 则$url的值就会变成www.shengyisyn.org/a.php?bb=hello

function UpdateParams($url,$paramName,$paramValue)
{
if(strpos($url,$paramName."="))
{
$i=strpos($url,$paramName."=");
$start=substr($url,0,$i).$paramName."=".urlencode($paramValue);//前面部分截取完毕
$end=substr($url,$i+strlen($paramName."="));//后面部分
if(strpos($end,"&") && strpos($end,"&")>0)
$end=substr($end,strpos($end,"&"));
else
$end="";

$url=$start.$end;
}
else
{
if(strpos($url,"?"))  //代表 有问号
$url=$url."&".$paramName."=".urlencode($paramValue); //加入参数
else
$url=$url."?".$paramName."=".urlencode($paramValue); //加入参数
}

return $url;
}


记住,调用代码只需调用 CTL_PageBar_Show 这个函数然后echo 结果就行。

有个注意点是,实际上 这个$allcount 数据量小的时候可以直接select count(*),如果数据量很大,那么不适合这么干,需要对其进行缓存。当然好处是速度快了,坏处是分页数据会不准,不过没关系,百度的分页有时也不准。正常现象

转载请注明来自程序员在囧途的官方网站,本文地址:http://www.shenyisyn.org/2013/05/17/phppaging.htm

本站文章除非特别注明其他均为原创,转载请注明出处和链接,违者必究!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: