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中看实例学正则表达式
Dec 25 PHP
mysql中存储过程、函数的一些问题
Feb 14 PHP
15种PHP Encoder的比较
Mar 06 PHP
php的curl实现get和post的代码
Aug 23 PHP
迁移PHP版本到PHP7
Feb 06 PHP
YII CLinkPager分页类扩展增加显示共多少页
Jan 29 PHP
PHP实现Google plus的好友拖拽分组效果
Oct 21 PHP
php base64 编码与解码实例代码
Mar 21 PHP
PHP迭代器接口Iterator用法分析
Dec 28 PHP
PHP+mysql防止SQL注入的方法小结
Apr 27 PHP
PHP数组对象与Json转换操作实例分析
Oct 22 PHP
解析laravel使用workerman用户交互、服务器交互
Apr 28 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
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
CodeIgniter记录错误日志的方法全面总结
2016/05/17 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
JavaScript 学习笔记(十一)
2010/01/19 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
jquery结婚电子请柬特效源码分享
2015/08/21 Javascript
基于Vue.js的表格分页组件
2016/05/22 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
2016/11/07 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
微信小程序基于Taro的分享图片功能实践详解
2019/07/12 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
Python处理文本文件中控制字符的方法
2017/02/07 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
使用tensorflow实现线性回归
2018/09/08 Python
详解Python time库的使用
2019/10/10 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
2020/12/07 Python
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
农村婚礼主持词
2014/03/13 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书
SpringRetry重试框架的具体使用
2021/07/25 Java/Android
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers