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 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
php 格式化数字的时候注意数字的范围
Apr 13 PHP
在VS2008中编译MYSQL5.1.48的方法
Jul 03 PHP
php中批量替换文件名的实现代码
Jul 20 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 PHP
php实现的返回数据格式化类实例
Sep 22 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
Apr 09 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
php7 安装yar 生成docker镜像
May 09 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
Oct 11 PHP
php利用ZipArchive类操作文件的实例
Jan 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
php面向对象全攻略 (七) 继承性
2009/09/30 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
js获取页面description的方法
2015/05/21 Javascript
js密码强度检测
2016/01/07 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
python连接mysql实例分享
2016/10/09 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
python批量修改文件编码格式的方法
2018/05/31 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
What is view? why do we have view?
2012/06/22 面试题
顺丰快递Java软件工程师面试题
2015/07/31 面试题
三关爱志愿服务活动方案
2014/08/17 职场文书
教师批评与自我批评
2014/10/15 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
Python字符串格式化方式
2022/04/07 Python