PHP实现仿Google分页效果的分页函数
本文实例讲述了PHP实现仿Google分页效果的分页函数。分享给大家供大家参考。具体如下:
/**
*分页函数
*@paramint$total总页数
*@paramint$pagesize每页几条
*@paramstring$pkeyurl中页面变量名称
*@paramstring$url基础url,其中的{page}会被替换为页码
*依赖函数request_urihttpInt
*/
functionpage($total,$pagesize=10,$pkey='p',$url=null){
$a_num=10;
$first='首页';
$last='尾页';
$pre='上页';
$next='下页';
$a_num=$a_num%2==0?$a_num+1:$a_num;
if(!$url){
$url=preg_replace("/&?{$pkey}=[^&]{0,}/",'',request_uri());
$url=strpos($url,'?')===FALSE?$url.'?'.$pkey.'={page}':$url.'&'.$pkey.'={page}';
}
$pages=ceil($total/$pagesize);
$curpage=httpInt($pkey,false,1);
$curpage=$curpage>$pages||$curpage<=0?1:$curpage;//当前页超范围置为1
$body='';$prefix='';$subfix='';
$start=$curpage-($a_num-1)/2;//开始页
$end=$curpage+($a_num-1)/2;//结束页
$start=$start<=0?1:$start;//开始页超范围修正
$end=$end>$pages?$pages:$end;//结束页超范围修正
if($pages>=$a_num){//总页数大于显示页数
if($curpage<=($a_num-1)/2){$end=$a_num;}//当前页在左半边补右边
if($end-$curpage<=($a_num-1)/2){$start-=5-($end-$curpage);}//当前页在右半边补左边
}
for($i=$start;$i<=$end;$i++){
if($i==$curpage){
$body.='<b>'.$i.'</b>';
}else{
$body.='<ahref="'.str_replace('{page}',$i,$url).'">'.$i.'</a>';
}
}
$prefix=($curpage==1?'':'<ahref="'.str_replace('{page}',1,$url).'">'.$first.'</a><ahref="'.str_replace('{page}',$curpage-1,$url).'">'.$pre.'</a>');
$subfix=($curpage==$pages?'':'<ahref="'.str_replace('{page}',$curpage+1,$url).'">'.$next.'</a><ahref="'.str_replace('{page}',$pages,$url).'">'.$last.'</a>');
$info="第{$curpage}/{$pages}页";
$go='<script>functionekup(){if(event.keyCode==13){clkyup();}}functionclkyup(){if(!/\d+/.test(document.getElementById(\'gsd09fhas9d\').value)){alert(\'请输入页码!\');return;};location=\''.$url.'\'.replace(/\\{page\\}/,document.getElementById(\'gsd09fhas9d\').value);}</script><inputonkeyup="ekup()"type="text"id="gsd09fhas9d"style="width:40px;vertical-align:text-baseline;padding:02px;font-size:10px;border:1pxsolidgray;"/><spanid="gsd09fhas9daa"onclick="clkyup();"style="cursor:pointer;text-decoration:underline;">转到</span>';
return$prefix.$body.$subfix.$info.$go;
}
/**
*说明:获取_SERVER['REQUEST_URI']值的通用解决方案
*/
functionrequest_uri()
{
if(isset($_SERVER['REQUEST_URI']))
{
$uri=$_SERVER['REQUEST_URI'];
}
else
{
if(isset($_SERVER['argv']))
{
$uri=$_SERVER['PHP_SELF'].'?'.$_SERVER['argv'][0];
}
else
{
$uri=$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
}
}
return$uri;
}
/**
*获取HTTP传递的整数
*@paramstring$key参数名称
*@parambool$ispost采取POST传递方式,默认为真http://blog.ddian.cn
*@return整数,非法时默认为$default
*/
functionhttpInt($key,$ispost=true,$default=0){
if($ispost){
if(isset($_POST[$key])){
if(empty($_POST[$key])){
return$default;
}else{
$val=trim($_POST[$key]);
if(preg_match("/^\-?\d+$/",$val))returnintval($val);
elsereturn$default;
}
}else{
return$default;
}
}else{
if(isset($_GET[$key])){
if(empty($_GET[$key])){
return$default;
}else{
$val=trim($_GET[$key]);
if(preg_match("/^\-?\d+$/",$val)){
returnintval($val);
}else{
return$default;
}
}
}else{
return$default;
}
}
}
希望本文所述对大家的php程序设计有所帮助。