PHP实现仿Google分页效果的分页函数

这篇文章主要介绍了PHP实现仿Google分页效果的分页函数,实例分析了php实现分页的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下。

本文实例讲述了PHP实现仿Google分页效果的分页函数,分享给大家供大家参考,具体如下:

  1. /**
  2. * 分页函数
  3. * @param int $total 总页数
  4. * @param int $pagesize 每页几条
  5. * @param string $pkey url中页面变量名称
  6. * @param string $url 基础url,其中的{page}会被替换为页码
  7. * 依赖函数 request_uri httpInt
  8. */
  9. function page($total,$pagesize=10,$pkey='p',$url=null){
  10. $a_num=10;
  11. $first=' 首页 ';
  12. $last=' 尾页 ';
  13. $pre=' 上页 ';
  14. $next=' 下页 ';
  15. $a_num=$a_num%2==0?$a_num+1:$a_num;
  16. if(!$url){
  17. $url=preg_replace("/&?{$pkey}=[^&]{0,}/", '',request_uri());
  18. $url=strpos($url, '?')===FALSE?$url.'?'.$pkey.'={page}':$url.'&'.$pkey.'={page}';
  19. }
  20. $pages=ceil($total/$pagesize);
  21. $curpage=httpInt($pkey,false,1);
  22. $curpage=$curpage>$pages||$curpage<=0?1:$curpage;//当前页超范围置为1
  23. $body='';$prefix='';$subfix='';
  24. $start=$curpage-($a_num-1)/2;//开始页
  25. $end=$curpage+($a_num-1)/2; //结束页
  26. $start=$start<=0?1:$start; //开始页超范围修正
  27. $end=$end>$pages?$pages:$end;//结束页超范围修正
  28. if($pages>=$a_num){//总页数大于显示页数
  29. if($curpage<=($a_num-1)/2){$end=$a_num;}//当前页在左半边补右边
  30. if($end-$curpage<=($a_num-1)/2){$start-=5-($end-$curpage);}//当前页在右半边补左边
  31. }
  32. for($i=$start;$i<=$end;$i++){
  33. if($i==$curpage){
  34. $body.='<b>'.$i.'</b>';
  35. }else{
  36. $body.='<a href="'.str_replace('{page}',$i,$url).'"> '.$i.' </a>';
  37. }
  38. }
  39. $prefix=($curpage==1?'':'<a href="'.str_replace('{page}',1,$url).'">'.$first.'</a><a href="'.str_replace('{page}',$curpage-1,$url).'">'.$pre.'</a>');
  40. $subfix=($curpage==$pages?'':'<a href="'.str_replace('{page}',$curpage+1,$url).'">'.$next.'</a><a href="'.str_replace('{page}',$pages,$url).'">'.$last.'</a>');
  41. $info=" 第{$curpage}/{$pages}页 ";
  42. $go='<script>function ekup(){if(event.keyCode==13){clkyup();}}function clkyup(){if(!/\d+/.test(document.getElementById(\'gsd09fhas9d\').value)){alert(\'请输入页码!\');return;};location=\''.$url.'\'.replace(/\\{page\\}/,document.getElementById(\'gsd09fhas9d\').value);}</script><input onkeyup="ekup()" type="text" /> <span onclick="clkyup();" >转到</span>';
  43. return $prefix.$body.$subfix.$info.$go;
  44. }
  45. /**
  46. * 说明:获取 _SERVER['REQUEST_URI'] 值的通用解决方案
  47. */
  48. function request_uri()
  49. {
  50. if (isset($_SERVER['REQUEST_URI']))
  51. {
  52. $uri = $_SERVER['REQUEST_URI'];
  53. }
  54. else
  55. {
  56. if (isset($_SERVER['argv']))
  57. {
  58. $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['argv'][0];
  59. }
  60. else
  61. {
  62. $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING'];
  63. }
  64. }
  65. return $uri;
  66. }
  67. /**
  68. * 获取HTTP传递的整数
  69. * @param string $key 参数名称
  70. * @param bool $ispost 采取POST传递方式,默认为真http://blog.ddian.cn
  71. * @return 整数,非法时默认为 $default
  72. */
  73. function httpInt($key, $ispost=true,$default=0) {
  74. if ($ispost) {
  75. if (isset($_POST[$key])) {
  76. if (emptyempty($_POST[$key])) {
  77. return $default;
  78. } else {
  79. $val = trim($_POST[$key]);
  80. if (preg_match("/^\-?\d+$/", $val)) return intval($val);
  81. else return $default;
  82. }
  83. } else {
  84. return $default;
  85. }
  86. } else {
  87. if (isset($_GET[$key])) {
  88. if (emptyempty($_GET[$key])) {
  89. return $default;
  90. } else {
  91. $val = trim($_GET[$key]);
  92. if (preg_match("/^\-?\d+$/", $val)) {
  93. return intval($val);
  94. } else {
  95. return $default;
  96. }
  97. }
  98. } else {
  99. return $default;
  100. }
  101. }
  102. }

希望本文所述对大家的php程序设计有所帮助。