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 相关文章推荐
html中select语句读取mysql表中内容
Oct 09 PHP
Discuz 6.0+ 批量注册用户名
Sep 13 PHP
基于Windows下Apache PHP5.3.1安装教程
Jan 08 PHP
探讨捕获php错误信息方法的详解
Jun 09 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
Oct 25 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
Jul 28 PHP
PHP中构造函数和析构函数解析
Oct 10 PHP
php数组查找函数总结
Nov 18 PHP
php正则表达式学习笔记
Nov 13 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
Oct 22 PHP
php7函数,声明,返回值等新特性介绍
May 25 PHP
PHP实现倒计时功能
Nov 16 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中die(),exit(),return的区别
2013/06/20 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
JS获取时间的方法
2015/01/21 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
layui分页效果实现代码
2017/05/19 Javascript
基于jQuery Easyui实现登陆框界面
2017/07/10 jQuery
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
详解如何使用nvm管理Node.js多版本
2019/05/06 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
vue实现购物车案例
2020/05/30 Javascript
python如何使用unittest测试接口
2018/04/04 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
python使用 __init__初始化操作简单示例
2019/09/26 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
软件设计的目标是什么
2016/12/04 面试题
Ruby如何进行文件操作
2014/07/17 面试题
数控专业大学生的自我鉴定
2013/11/13 职场文书
毕业生就业协议书
2014/04/11 职场文书
市场营销专业自荐书
2014/06/10 职场文书
促销活动总结模板
2014/07/01 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书