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 相关文章推荐
PHPMailer邮件类利用smtp.163.com发送邮件方法
Sep 11 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
Nov 12 PHP
php操作sqlserver关于时间日期读取的小小见解
Nov 29 PHP
PHP防CC攻击实现代码
Dec 29 PHP
thinkphp 多表 事务详解
Jun 17 PHP
php函数指定默认值方法的小例子
Dec 04 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
codeigniter实现get分页的方法
Jul 10 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
Feb 07 PHP
php提供实现反射的方法和实例代码
Sep 17 PHP
PHP程序员必须知道的两种日志实例分析
May 14 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实现股票趋势图和柱形图
2015/02/07 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
优化RequireJS项目的相关技巧总结
2015/07/01 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
vue axios登录请求拦截器
2018/04/02 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
Python3实现并发检验代理池地址的方法
2016/09/18 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python实现简单的文字识别
2018/11/27 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
Python中文编码知识点
2019/02/18 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
python爬虫添加请求头代码实例
2019/12/28 Python
罗技美国官网:Logitech美国
2020/01/22 全球购物
食品安全汇报材料
2014/08/18 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
医院党建工作总结2015
2015/05/26 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫