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 相关文章推荐
BBS(php &amp; mysql)完整版(一)
Oct 09 PHP
php getimagesize 上传图片的长度和宽度检测代码
May 15 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
解析用PHP实现var_export的详细介绍
Jun 20 PHP
PHP 5.3新增魔术方法__invoke概述
Jul 23 PHP
Yii框架中memcache用法实例
Dec 03 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
thinkphp整合微信支付代码分享
Nov 24 PHP
php rsa 加密,解密,签名,验签详解
Dec 06 PHP
Zend Framework动作控制器用法示例
Dec 09 PHP
Laravel5中Cookie的使用详解
May 03 PHP
PHP实现简单用户登录界面
Oct 23 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
新52大事件
2020/03/03 欧美动漫
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
浅析javascript闭包 实例分析
2010/12/25 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
微信小程序-form表单提交代码实例
2019/04/29 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
python将txt文件读取为字典的示例
2018/12/22 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
详解Python sys.argv使用方法
2019/05/10 Python
Django获取应用下的所有models的例子
2019/08/30 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
html5与css3小应用
2013/04/03 HTML / CSS
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
企业法人代表证明书
2014/09/27 职场文书
后天观后感
2015/06/08 职场文书
名人传读书笔记
2015/06/26 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
2016中秋节广告语
2016/01/28 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
python实现会员信息管理系统(List)
2022/03/18 Python