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 相关文章推荐
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
php中的一些数组排序方法分享
Jul 20 PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 PHP
php实现图片转换成ASCII码的方法
Apr 03 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
Smarty保留变量用法分析
May 23 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
Laravel实现表单提交
May 07 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
thinkPHP框架实现生成条形码的方法示例
Jun 06 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 分页类 扩展代码
2009/06/11 PHP
php 带逗号千位符数字的处理方法
2012/01/10 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
PHP Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
centos系统升级python 2.7.3
2014/07/03 Python
Python是编译运行的验证方法
2015/01/30 Python
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
新员工欢迎词
2014/01/12 职场文书
安全教育感言
2014/03/04 职场文书
《夹竹桃》教学反思
2014/04/20 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
干部考察材料范文
2014/12/24 职场文书
研究生简历自我评
2015/03/11 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
经费申请报告
2015/05/15 职场文书
2016元旦主持人开场白
2015/12/03 职场文书