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


Posted in PHP onAugust 31, 2008

page.php

<?php /** 
** 通用php分页类。(仿Google样式) 
** 只需提供记录总数与每页显示数两个参数。(已附详细使用说明..) 
** 无需指定URL,链接由程序生成。方便用于检索结果分页。 
** 表单采用GET方法提交,可保证在诸如查询之,删除之类的操作时,不丢失URL参数 
**/ 
class Pager{ 
//IE地址栏地址 
var $url; 
//记录总条数 
var $countall; 
//总页数 
var $page; 
//分页数字链接 
var $thestr; 
//首页、上一页链接 
var $backstr; 
//尾页、下一页链接 
var $nextstr; 
//当前页码 
var $pg; 
//每页显示记录数量 
var $countlist; 
//翻页样式 
var $style; 
//构造函数,实例化该类的时候自动执行该函数 
function Pager($countall,$countlist,$style="page"){ 
//记录数与每页显示数不能整队时,页数取余后加1 
$this->countall = $countall; 
$this->countlist = $countlist; 
$this->style=$style; 
if ($this->countall%$this->countlist!=0){ 
$this->page=sprintf("%d",$this->countall/$this->countlist)+1; 
}else{ 
$this->page=$this->countall/$this->countlist; 
} 
$this->pg=$_GET["pg"]; 
//保证pg在未指定的情况下为从第1页开始 
if (!ereg("^[1-9][0-9]*$",$this->pg) || empty($this->pg)){ 
$this->pg=1; 
} 
//页码超出最大范围,取最大值 
if ($this->pg>$this->page){ 
$this->pg=$this->page; 
} 
//得到当前的URL。具体实现请看最底部的函数实体 
$this->url = Pager::getUrl(); 
//替换错误格式的页码为正确页码 
if(isset($_GET["pg"]) && $_GET["pg"]!=$this->pg){ 
$this->url=str_replace("?pg=".$_GET["pg"],"?pg=$this->pg",$this->url); 
$this->url=str_replace("&pg=".$_GET["pg"],"&pg=$this->pg",$this->url); 
} 
//生成12345等数字形式的分页。 
if ($this->page<=10){ 
for ($i=1;$i<$this->page+1;$i++){ 
$this->thestr=$this->thestr.Pager::makepg($i,$this->pg); 
} 
}else{ 
if ($this->pg<=5){ 
for ($i=1;$i<10;$i++){ 
$this->thestr=$this->thestr.Pager::makepg($i,$this->pg); 
} 
}else{ 
if (6+$this->pg<=$this->page){ 
for ($i=$this->pg-4;$i<$this->pg+6;$i++){ 
$this->thestr=$this->thestr.Pager::makepg($i,$this->pg); 
} 
}else{ 
for ($i=$this->pg-4;$i<$this->page+1;$i++){ 
$this->thestr=$this->thestr.Pager::makepg($i,$this->pg); 
} 
} 
} 
} 
//生成上页下页等文字链接 
$this->backstr = Pager::gotoback($this->pg); 
$this->nextstr = Pager::gotonext($this->pg,$this->page); 
//echo (" 共".$this->countall." 条,每页".$this->countlist."条,共".$this->page."页".$this->backstr.$this->thestr.$this->nextstr); 
} 
//生成数字分页的辅助函数 
function makepg($i,$pg){ 
if ($i==$pg){ 
return " <font class='".$this->style."'>".$i."</font>"; 
}else{ 
return " <a href=".Pager::replacepg($this->url,5,$i)." class='".$this->style."'><u>".$i."</u></a>"; 
} 
} 
//生成上一页等信息的函数 
function gotoback($pg){ 
if ($pg-1>0){ 
return $this->gotoback=" <a href=".Pager::replacepg($this->url,3,0)." class='".$this->style."'>首页</a> <a href=".Pager::replacepg($this->url,2,0)." class='".$this->style."'>上一页</a>"; 
}else{ 
return $this->gotoback="<span class='".$this->style."'>首页 上一页</span> "; 
} 
} 
//生成下一页等信息的函数 
function gotonext($pg,$page){ 
if ($pg < $page){ 
return " <a href=".Pager::replacepg($this->url,1,0)." class='".$this->style."'>下一页</a> <a href=".Pager::replacepg($this->url,4,0)." class='".$this->style."'>尾页</a>"; 
}else{ 
return " <span class='".$this->style."'>下一页 尾页</span>"; 
} 
} 
//处理url中$pg的方法,用于自动生成pg=x 
function replacepg($url,$flag,$i){ 
if ($flag == 1){ 
$temp_pg = $this->pg; 
return str_replace("pg=".$temp_pg,"pg=".($this->pg+1),$url); 
}else if($flag == 2) { 
$temp_pg = $this->pg; 
return str_replace("pg=".$temp_pg,"pg=".($this->pg-1),$url); 
}else if($flag == 3) { 
$temp_pg = $this->pg; 
return str_replace("pg=".$temp_pg,"pg=1",$url); 
}else if($flag == 4){ 
$temp_pg = $this->pg; 
return str_replace("pg=".$temp_pg,"pg=".$this->page,$url); 
}else if($flag == 5){ 
$temp_pg = $this->pg; 
return str_replace("pg=".$temp_pg,"pg=".$i,$url); 
}else{ 
return $url; 
} 
} 
//获得当前URL的方法 
function getUrl(){ 
$url="http://".$_SERVER["HTTP_HOST"]; 
if(isset($_SERVER["REQUEST_URI"])){ 
$url.=$_SERVER["REQUEST_URI"]; 
}else{ 
$url.=$_SERVER["PHP_SELF"]; 
if(!empty($_SERVER["QUERY_STRING"])){ 
$url.="?".$_SERVER["QUERY_STRING"]; 
} 
} 
//在当前的URL里加入pg=x字样 
if (!ereg("(pg=|PG=|pG=|Pg=)", $url)){ 
if (!strpos($url,"?")){ 
$url = $url."?pg=1"; 
}else{ 
$url = $url."&pg=1"; 
} 
} 
return $url; 
} 
} 
?>
PHP 相关文章推荐
PHP文本数据库的搜索方法
Oct 09 PHP
frename PHP 灵活文件命名函数 frename
Sep 09 PHP
PHP遍历数组的几种方法
Mar 22 PHP
解析thinkphp的左右值无限分类
Jun 20 PHP
使用PHP导出Redis数据到另一个Redis中的代码
Mar 12 PHP
PHP实现克鲁斯卡尔算法实例解析
Aug 22 PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 PHP
开启PHP的伪静态模式
Dec 31 PHP
php简单实现数组分页的方法
Apr 30 PHP
Yii2实现同时搜索多个字段的方法
Aug 10 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
Aug 06 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 PHP
php将数据库中的电话号码读取出来并生成图片
Aug 31 #PHP
PHP生成HTML静态页面实例代码
Aug 31 #PHP
php array_slice函数的使用以及参数详解
Aug 30 #PHP
PHP中常用数组处理方法实例分析
Aug 30 #PHP
php判断字符以及字符串的包含方法属性
Aug 30 #PHP
PHP define函数的使用说明
Aug 27 #PHP
PHP开发中常用的8个小技巧
Aug 27 #PHP
You might like
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
2011/05/24 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
VUE实时监听元素距离顶部高度的操作
2020/07/29 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
python中实现控制小数点位数的方法
2019/01/24 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
python自动发微信监控报警
2019/09/06 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
北京大学自荐信范文
2014/01/28 职场文书
40岁生日感言
2014/02/15 职场文书
观后感的写法
2015/06/19 职场文书
欢送领导祝酒词
2015/08/12 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python
MySQL数据库如何给表设置约束详解
2022/03/13 MySQL