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程序设计有所帮助。