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 相关文章推荐
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
php中iconv函数使用方法
May 24 PHP
解析PHP计算页面执行时间的实现代码
Jun 18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
Jun 23 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
Feb 15 PHP
php图片添加文字水印实现代码
Mar 15 PHP
php实现PDO中捕获SQL语句错误的方法
Feb 16 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
Jan 29 PHP
详解php与ethereum客户端交互
Apr 28 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
Oct 08 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
Aug 06 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使用feof()函数读文件的方法
2014/11/07 PHP
PHP查询快递信息的方法
2015/03/07 PHP
PHP下载远程图片并保存到本地方法总结
2016/01/22 PHP
PHP框架性能测试报告
2016/05/08 PHP
php和js实现根据子网掩码和ip计算子网功能示例
2019/11/09 PHP
Js中sort()方法的用法
2006/11/04 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
js 通用订单代码
2013/12/23 Javascript
基于jQuery实现表单提交验证
2014/11/24 Javascript
javascript基本类型详解
2014/11/28 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
sea.js常用的api简易文档
2016/11/15 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
canvas实现钟表效果
2017/02/13 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
Python之eval()函数危险性浅析
2014/07/03 Python
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
Python对数据库操作
2016/03/28 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
python实现横向拼接图片
2020/03/23 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
大学生职业生涯规划书范文
2014/01/04 职场文书
新学期红领巾广播稿
2014/01/14 职场文书