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


Posted in PHP onJuly 29, 2015

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

/**
 * 分页函数
 * @param int $total  总页数
 * @param int $pagesize 每页几条
 * @param string $pkey url中页面变量名称
 * @param string $url  基础url,其中的{page}会被替换为页码
 * 依赖函数 request_uri httpInt
 */
function page($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.='<a href="'.str_replace('{page}',$i,$url).'"> '.$i.' </a>';
     }
  }
  $prefix=($curpage==1?'':'<a href="'.str_replace('{page}',1,$url).'">'.$first.'</a><a href="'.str_replace('{page}',$curpage-1,$url).'">'.$pre.'</a>');
  $subfix=($curpage==$pages?'':'<a href="'.str_replace('{page}',$curpage+1,$url).'">'.$next.'</a><a href="'.str_replace('{page}',$pages,$url).'">'.$last.'</a>');
  $info=" 第{$curpage}/{$pages}页 ";
  $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" id="gsd09fhas9d" style="width:40px;vertical-align:text-baseline;padding:0 2px;font-size:10px;border:1px solid gray;"/> <span id="gsd09fhas9daa" onclick="clkyup();" style="cursor:pointer;text-decoration:underline;">转到</span>';
  return $prefix.$body.$subfix.$info.$go;
}
/**
 * 说明:获取 _SERVER['REQUEST_URI'] 值的通用解决方案
 */
function request_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传递的整数
 * @param string $key 参数名称
 * @param bool $ispost 采取POST传递方式,默认为真http://blog.ddian.cn
 * @return 整数,非法时默认为 $default
 */
 function httpInt($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)) return intval($val);
         else return $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)) {
           return intval($val);
         } else {
           return $default;
         }
       }
     } else {
       return $default;
     }
   }
}

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

PHP 相关文章推荐
使用sockets:从新闻组中获取文章(二)
Oct 09 PHP
PHP strncasecmp字符串比较的小技巧
Jan 04 PHP
对text数据类型不支持代码页转换 从: 1252 到: 936
Apr 23 PHP
模板引擎正则表达式调试小技巧
Jul 20 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 PHP
php封装的mysqli类完整实例
Oct 18 PHP
PHP实现简单ajax Loading加载功能示例
Dec 28 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 PHP
Nginx下ThinkPHP5的配置方法详解
Aug 01 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
Mar 25 PHP
php 实现银联商务H5支付的示例代码
Oct 12 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 #PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 #PHP
php去掉文件前几行的方法
Jul 29 #PHP
PHP实现的简单网络硬盘
Jul 29 #PHP
PHP简单生成缩略图相册的方法
Jul 29 #PHP
PHP之预定义接口详解
Jul 29 #PHP
PHP实现的迷你漂流瓶
Jul 29 #PHP
You might like
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
PHP制作用户注册系统
2015/10/23 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
PHP多维数组指定多字段排序的示例代码
2018/05/16 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
详解Python命令行解析工具Argparse
2016/04/20 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
Python中optparser库用法实例详解
2018/01/26 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
物理教育专业毕业生推荐信
2013/11/03 职场文书
2014年社区国庆节活动方案
2014/09/16 职场文书
白鹤梁导游词
2015/02/06 职场文书
生产车间管理制度
2015/08/04 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android