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 adodb操作mysql数据库
Mar 19 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
DOM基础及php读取xml内容操作的方法
Jan 23 PHP
php数组添加与删除单元的常用函数实例分析
Feb 16 PHP
PHP5多态性与动态绑定介绍
Apr 03 PHP
PHP SPL标准库之SplFixedArray使用实例
May 12 PHP
php图像处理类实例
Jul 28 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
Feb 08 PHP
PHP封装的PDO数据库操作类实例
Jun 21 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 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
php 中的4种标记风格介绍
2012/05/10 PHP
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
django使用多个数据库的方法实例
2021/03/04 Python
CSS3实现同时执行倾斜和旋转的动画效果
2016/10/27 HTML / CSS
HTML5 与 XHTML2
2008/10/17 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
幼儿园毕业家长感言
2014/02/10 职场文书
同意报考公务员证明
2015/06/17 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
Python turtle编写简单的球类小游戏
2022/03/31 Python