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调用三种数据库的方法(2)
Oct 09 PHP
php 代码优化的42条建议 推荐
Sep 25 PHP
PHP中10个不常见却非常有用的函数
Mar 21 PHP
关于crontab的使用详解
Jun 24 PHP
php获取用户浏览器版本的方法
Jan 03 PHP
php+mysqli批量查询多张表数据的方法
Jan 29 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
Mar 19 PHP
无需数据库在线投票调查php代码
Jul 20 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 PHP
Laravel框架Eloquent ORM修改数据操作示例
Dec 03 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 PHP
php中get_object_vars()在数组的实例用法
Feb 22 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
如何开始收听短波广播
2021/03/01 无线电
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
javascript取消文本选定的实现代码
2010/11/14 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
js实现轮播图效果 z-index实现轮播图
2020/01/17 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
使用graphics.py实现2048小游戏
2015/03/10 Python
Python中扩展包的安装方法详解
2017/06/14 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
MADE法国:提供原创设计师家具
2018/09/18 全球购物
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
翻译学院毕业生自荐书
2014/02/02 职场文书
火车的故事教学反思
2014/02/11 职场文书
心理健康日活动总结
2014/05/08 职场文书
积极向上的团队口号
2014/06/06 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android