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 相关文章推荐
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
Jul 09 PHP
用libTemplate实现静态网页的生成
Oct 09 PHP
Apache中php.ini的设置方法
Feb 28 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
Jun 09 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 PHP
PHP  Yii清理缓存的实现方法
Nov 10 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 PHP
php用户名的密码加密更安全的方法
Jun 21 PHP
如何在Mac上通过docker配置PHP开发环境
May 29 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
PHPMyAdmin 快速配置方法
2009/05/11 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
How to Auto Include a Javascript File
2007/02/02 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
Python多线程下载文件的方法
2015/07/10 Python
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
详解Python异常处理中的Finally else的功能
2017/12/29 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
python实现猜数字游戏
2020/03/25 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
python对execl 处理操作代码
2020/06/22 Python
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
COSETTE官网:奢华,每天
2020/03/22 全球购物
医院护士求职自荐信格式
2013/09/21 职场文书
党校培训自我鉴定
2014/02/01 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
给校长的建议书
2014/03/12 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle