本文实例讲述了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实现仿Google分页效果的分页函数的更多相关文章

  1. AJAX实现仿Google Suggest效果

    修复了一些细节代码(支持持续按键事件) *项目名称:AJAX实现类Google Suggest效果*作者:草履虫(也就是蓝色的ecma)*联系:caolvchong@gmail.com*时间:2007 ...

  2. PHP通用分页类page.php[仿google分页]

    <?php /** ** 通用php分页类.(仿Google样式) ** 只需提供记录总数与每页显示数两个参数.(已附详细使用说明..) ** 无需指定URL,链接由程序生成.方便用于检索结果分 ...

  3. 基于vue2.0实现仿百度前端分页效果(二)

    前言 上篇文章中,已经使用vue实现前端分页效果,这篇文章我们单独将分页抽离出来实现一个分页组件 先看实现效果图 代码实现 按照惯例,我们在冻手实现的时候还是先想一想vue实现组件的思路 1.需要提前 ...

  4. 基于vue2.0实现仿百度前端分页效果(一)

    前言 最近在接手一个后台管理项目的时候,由于之前是使用jquery+bootstrap做的,后端使用php yii框架,前后端耦合在一起,所以接手过来之后通过vue进行改造,但依然继续使用的boots ...

  5. ViewPager+GridView实现首页导航栏布局分页效果

    如图是效果图用ViewPager+GridView实现首页导航栏布局分页效果来实现的效果 Demo下载地址:http://download.csdn.net/detail/qq_29774291/96 ...

  6. salesforce 零基础学习(四十九)自定义列表分页之使用Pagination实现分页效果 ※※※

    上篇内容为Pagination基类的封装,此篇接上篇内容描述如何调用Pagination基类. 首先先创建一个sObject,起名Company info,此object字段信息如下: 为了国际化考虑 ...

  7. 原生JS实现分页效果2.0(新增了上一页和下一页,添加当前元素样式)

    虽然写的很烂,但至少全部都是自己写的,因为这个没有固定的顺序,所以就没有封装,如果你技术好的话,可以你写的分享给我,谢谢. <!DOCTYPE html><html lang=&qu ...

  8. 原生JS实现分页效果1.0

    不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html><html lang="en">&l ...

  9. 分享5种风格的 jQuery 分页效果【附代码】

    jPaginate 是一款非常精致的分页插件,提供了五种不同风格的分页效果,支持鼠标悬停翻页,快速分页功能.这款插件还提供了丰富的配置选项,你可以根据需要进行设置. 效果演示      源码下载 各个 ...

随机推荐

  1. android adb shell 命令大全

    1. 显示系统中全部Android平台: android list targets 2. 显示系统中全部AVD(模拟器): android list avd 3. 创建AVD(模拟器): androi ...

  2. 5V与3.3V器件电平转换

    源:5V与3.3V器件电平转换 当你使用3.3V的单片机的时候,电平转换就在所难免了,经常会遇到3.3转5V或者5V转3.3V的情况,这里介绍一个简单的电路,他可以实现两个电平的相互转换(注意是相互哦 ...

  3. 关于java.lang.reflect.InvocationTargetException(jar 包缺少或者冲突)的错误

    我在合肥那边运行了的是湖北石首市的项目没有错 可是回武汉之后 运行这个项目 点击这里的时候 就报错java.lang.reflect.InvocationTargetException   不是数据库 ...

  4. 实例:SSH结合Easyui实现Datagrid的批量删除功能

    在我先前的基础上面添加批量删除功能.实现的效果如下 删除成功 通常情况下删除不应该真正删除,而是应该有一个标志flag,但flag=true表示状态可见,但flag=false表示状态不可见,为删除状 ...

  5. 排座椅(seat)

    排座椅(seat) 题目描述 上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课 ...

  6. POJ 3683 Priest John's Busiest Day

    2-SAT简单题,判断一下两个开区间是否相交 #include<cstdio> #include<cstring> #include<cmath> #include ...

  7. paramiko 模块安装

    windows版本: 所需软件有:PyCrypto.ecdsa.paramiko. 一.软件下载地址 1.PyCrypto下载地址:  http://www.voidspace.org.uk/pyth ...

  8. javascript 回调, 单线程执行

    原文: http://www.cnblogs.com/aaronjs/p/3322466.html 这里的"回调"并不是"阻塞",而会空出执行线程,直至操作完成 ...

  9. 改变MyEclipse创建JSP时默认的pageEncoding编码

    如何改变MyEclipse创建JSP时默认的pageEncoding编码 有时我们需要改变MyEclipse创建JSP时默认的pageEncoding编码,因为也许它默认的编码不是我们想要的,比如我们 ...

  10. JAV基础语法之---数据类型转换

    数制转换": 1.string 转 byte[] String str = "Hello";byte[] srtbyte = str.getBytes(); 2.byte ...