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 相关文章推荐
基于mysql的bbs设计(一)
Oct 09 PHP
很实用的一个完整email发送程序
Oct 09 PHP
PHP 中的批处理的实现
Jun 14 PHP
php 获得汉字拼音首字母的函数
Aug 01 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
Jun 10 PHP
php函数的常用方法及注意之处小结
Jul 10 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
php实现把url转换迅雷thunder资源下载地址的方法
Nov 07 PHP
php简单实现快速排序的方法
Apr 04 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
Oct 21 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
NT IIS下用ODBC连接数据库
2006/10/09 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
PHP的几个常用数字判断函数代码
2012/04/24 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
2018/12/25 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
vue-cli2 构建速度优化的实现方法
2019/01/08 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
python搭建简易服务器分析与实现
2012/12/15 Python
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
浅谈Python peewee 使用经验
2017/10/20 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
详解django自定义中间件处理
2018/11/21 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
文明旅游倡议书
2015/04/28 职场文书
国庆节新闻稿
2015/07/17 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
微信小程序实现录音Record功能
2021/05/09 Javascript
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫