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 相关文章推荐
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
Mar 29 PHP
php URL编码解码函数代码
Mar 10 PHP
php 静态化实现代码
Mar 20 PHP
在PHP中养成7个面向对象的好习惯
Jul 17 PHP
PHP与SQL注入攻击防范小技巧
Sep 16 PHP
php中json_decode()和json_encode()的使用方法
Jun 04 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
php配合jquery实现增删操作具体实例
Dec 12 PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 PHP
php递归法读取目录及文件的方法
Jan 30 PHP
PHP中PDO事务处理操作示例
May 02 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 11 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输出时间差函数代码
2013/01/28 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
图解js图片轮播效果
2015/12/20 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
Python中防止sql注入的方法详解
2017/02/25 Python
python中import reload __import__的区别详解
2017/10/16 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
python使用插值法画出平滑曲线
2018/12/15 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
Sony C++笔试题
2013/03/10 面试题
《小小竹排画中游》教学反思
2014/02/26 职场文书
团队拓展活动总结
2014/08/27 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
解决Python字典查找报Keyerror的问题
2021/05/26 Python
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python