PHP分页类集锦


Posted in PHP onNovember 18, 2014

分页类一

<?php 

/** 

分页类 

修改:Silence 

Creatdate:2006-5-30 

LastModify:2009-5-31 

使用方法 

$page = new page ( $result, 20 ); //$result为返回记录集数组 ,20为返回每页条数 

$index = $page->GetIndexBar () . $page->GetPageInfo (); 

print_r ( $result ); 

echo \"<br><br>\"; 

echo \"<center>\".$index.\"</center>\";

*/

class Page { 

private $mTotalRowsNum = 0; // 总信息行数 

private $mCurPageNumber = 1; // 当前所在页 

private $mTotalPagesNum = 1; // 总页数 

private $mQueryString; // 页面传递的数据(url?后的字符串) 

private $mPageRowsNum = 20; // 每页显示行数 

private $mIndexBarLength = 11; // 索引条的页数 

private $mIndexBar = ''; // 页码索引条 

private $mPageInfo = ''; // 分页信息 

// 页码索引条样式 

private $mNextButton = \"<font style=\\"font-family:webdings\\">8</font>\"; 

private $mPreButton = \"<font style=\\"font-family:webdings\\">7</font>\"; 

private $mFirstButton = \"<font style=\\"font-family:webdings\\">9</font>\"; 

private $mLastButton = \"<font style=\\"font-family:webdings\\">:</font>\"; 

private $mCssIndexBarCurPage = \"font-weight:bold;color:#FF0000\"; 

private $mCssIndexBarPage = ''; 

// 分页信息样式 

private $mCssPageInfoNumFont = 'color:#FF0000'; 

private $mCssPageInfoFont = ''; 

// 构造方法 

public function __construct(&$rSqlQuery, $userPageRowsNum = '') { 

if (! is_array ( $rSqlQuery )) { 

$this->SetDbPageBreak ( $rSqlQuery, $userPageRowsNum ); 

} else { 

$this->SetArrayPageBreak ( $rSqlQuery, $userPageRowsNum ); 

} 

} 

// 设置数据库型分页 

private function SetDbPageBreak(&$rSqlQuery, $userPageRowsNum = '') { 

$this->SetDbTotalRowsNum ( $rSqlQuery ); 

$this->SetTotalPagesNum ( $userPageRowsNum ); 

if ($this->mTotalPagesNum > 1) { 

$this->SetCurPageNumber (); 

$this->SetSqlQuery ( $rSqlQuery ); 

$this->SetQueryString (); 

$this->SetIndexBar (); 

$this->SetPageInfo (); 

} 

} 

// 设置数组型分页 

private function SetArrayPageBreak(&$rArray, $userPageRowsNum = '', $userTotalRowsNum = '') { 

$this->SetArrayTotalRowsNum ( $rArray, $userTotalRowsNum ); 

$this->SetTotalPagesNum ( $userPageRowsNum ); 

if ($this->mTotalPagesNum > 1) { 

$this->SetCurPageNumber (); 

$this->SetArray ( $rArray ); 

$this->SetQueryString (); 

$this->SetIndexBar (); 

$this->SetPageInfo (); 

} 

} 

// 数据库型计算总行数 

private function SetDbTotalRowsNum($rSqlQuery) { 

$this->mTotalRowsNum = mysql_num_rows ( mysql_query ( $rSqlQuery ) ); 

} 

// 数组型计算总行数 

private function SetArrayTotalRowsNum($array) { 

$this->mTotalRowsNum = count ( $array ); 

} 

// 计算总页数 

private function SetTotalPagesNum($userPageRowsNum = '') { 

if ($userPageRowsNum) { 

$this->mPageRowsNum = $userPageRowsNum; 

} 

$this->mTotalPagesNum = ( int ) (floor ( ($this->mTotalRowsNum - 1) / $this->mPageRowsNum ) + 1); 

} 

// 计算当前页数 

private function SetCurPageNumber() { 

if ($_GET ['page']) { 

$this->mCurPageNumber = $_GET ['page']; 

} 

} 

// 修正Sql截取语句 

private function SetSqlQuery(&$rSqlQuery) { 

$start_number = ($this->mCurPageNumber - 1) * $this->mPageRowsNum; 

$rSqlQuery .= \" LIMIT \" . $start_number . \",\" . $this->mPageRowsNum; 

} 

// 修正截取后的Array 

private function SetArray(&$rArray) { 

$start_number = ($this->mCurPageNumber - 1) * $this->mPageRowsNum; 

$rArray = array_slice ( $rArray, $start_number, $this->mPageRowsNum ); 

} 

// 修正 $_GET 传递数据 

private function SetQueryString() { 

$query_string = $_SERVER ['QUERY_STRING']; 

if ($query_string == '') { 

$this->mQueryString = \"?page=\"; 

} else { 

$this->mQueryString = preg_replace ( \"/&?page=\d+/\", '', $query_string ); 

$this->mQueryString = \"?\" . $this->mQueryString . \"&page=\"; 

} 

} 

// 设置页码索引条 

private function GetPageIndex() { 

if ($this->mTotalPagesNum <= $this->mIndexBarLength) { 

$first_number = 1; 

$last_number = $this->mTotalPagesNum; 

} else { 

$offset = ( int ) floor ( $this->mIndexBarLength / 2 ); 

if (($this->mCurPageNumber - $offset) <= 1) { 

$first_number = 1; 

} elseif (($this->mCurPageNumber + $offset) > $this->mTotalPagesNum) { 

$first_number = $this->mTotalPagesNum - $this->mIndexBarLength + 1; 

} else { 

$first_number = $this->mCurPageNumber - $offset; 

} 

$last_number = $first_number + $this->mIndexBarLength - 1; 

} 

$last_number; 

for($i = $first_number; $i <= $last_number; $i ++) { 

if ($this->mCurPageNumber == $i) { 

$page_index .= \"<font style='\" . $this->mCssIndexBarCurPage . \"'>\" . $i . \"</font> \"; 

} else { 

$page_index .= \" <a href='\" . $this->mQueryString . $i . \"' style='\" . $this->mCssIndexBarPage . \"'>\" . $i . \"</a> \"; 

} 

} 

return $page_index; 

} 

// 设置页码索引条 

private function SetIndexBar() { 

$this->mIndexBar = $this->GetNavFirstButton (); 

$this->mIndexBar .= $this->GetNavPreButton (); 

$this->mIndexBar .= $this->GetPageIndex (); 

$this->mIndexBar .= $this->GetNavNextButton (); 

$this->mIndexBar .= $this->GetNavLastButton (); 

} 

// 得到页码索引条 首页按钮 

private function GetNavFirstButton() { 

return \"<a href='\" . $this->mQueryString . \"1'>\" . $this->mFirstButton . \"</a> \"; 

} 

// 得到页码索引条 上一页按钮 

private function GetNavPreButton() { 

if ($this->mCurPageNumber > 1) { 

$pre_number = $this->mCurPageNumber - 1; 

} else { 

$pre_number = 1; 

} 

return \"<a href='\" . $this->mQueryString . $pre_number . \"'>\" . $this->mPreButton . \"</a> \"; 

} 

// 得到页码索引条 下一页按钮 

private function GetNavNextButton() { 

if ($this->mCurPageNumber < $this->mTotalPagesNum) { 

$next_number = $this->mCurPageNumber + 1; 

} else { 

$next_number = $this->mTotalPagesNum; 

} 

return \"<a href='\" . $this->mQueryString . $next_number . \"'>\" . $this->mNextButton . \"</a> \"; 

} 

// 得到页码索引条 末页按钮 

private function GetNavLastButton() { 

return \"<a href='\" . $this->mQueryString . $this->mTotalPagesNum . \"'>\" . $this->mLastButton . \"</a> \"; 

} 

// 设置分页信息 

private function SetPageInfo() { 

$this->mPageInfo = \"<font style='\" . $this->mCssPageInfoFont . \"'>\"; 

$this->mPageInfo .= \"共 <font style='\" . $this->mCssPageInfoNumFont . \"'>\" . $this->mTotalRowsNum . \"</font> 条信息 | \"; 

$this->mPageInfo .= \"<font style='\" . $this->mCssPageInfoNumFont . \"'>\" . $this->mPageRowsNum . \"</font> 条/页 | \"; 

$this->mPageInfo .= \"共 <font style='\" . $this->mCssPageInfoNumFont . \"'>\" . $this->mTotalPagesNum . \"</font> 页 | \"; 

$this->mPageInfo .= \"第 <font style='\" . $this->mCssPageInfoNumFont . \"'>\" . $this->mCurPageNumber . \"</font> 页\"; 

$this->mPageInfo .= \"</font>\"; 

} 

// 取出页码索引条 

public function GetIndexBar() { 

return $this->mIndexBar; 

} 

// 取出分页信息 

public function GetPageInfo() { 

return $this->mPageInfo; 

} 

//释放类 

function __destruct() { 

} 

} 

?>

分页类二

<?php

/*

* Created on 2007-6-8

* Programmer : Alan , Msn - haowubai@hotmail.com

* KeBeKe.com Develop a project PHP - MySQL - Apache

* Window - Preferences - PHPeclipse - PHP - Code Templates

*/

//为了避免重复包含文件而造成错误,加了判断函数是否存在的条件:

if(!function_exists(pageft)){

//定义函数pageft(),三个参数的含义为:

//$totle:信息总数;

//$displaypg:每页显示信息数,这里设置为默认是20;

//$url:分页导航中的链接,除了加入不同的查询信息“page”外的部分都与这个URL相同。

// 默认值本该设为本页URL(即$_SERVER["REQUEST_URI"]),但设置默认值的右边只能为常量,所以该默认值设为空字符串,在函数内部再设置为本页URL。

function pageft($totle,$displaypg=20,$url=''){

//定义几个全局变量:

//$page:当前页码;

//$firstcount:(数据库)查询的起始项;

//$pagenav:页面导航条代码,函数内部并没有将它输出;

//$_SERVER:读取本页URL“$_SERVER["REQUEST_URI"]”所必须。

global $page,$firstcount,$pagenav,$_SERVER;

//为使函数外部可以访问这里的“$displaypg”,将它也设为全局变量。注意一个变量重新定义为全局变量后,原值被覆盖,所以这里给它重新赋值。

$GLOBALS["displaypg"]=$displaypg;

if(!$page) $page=1;

//如果$url使用默认,即空值,则赋值为本页URL:

if(!$url){ $url=$_SERVER["REQUEST_URI"];}

//URL分析:

$parse_url=parse_url($url);

$url_query=$parse_url["query"]; //单独取出URL的查询字串

if($url_query){

//因为URL中可能包含了页码信息,我们要把它去掉,以便加入新的页码信息。

//这里用到了正则表达式,请参考“PHP中的正规表达式”

$url_query=ereg_replace("(^|&)page=$page","",$url_query);

//将处理后的URL的查询字串替换原来的URL的查询字串:

$url=str_replace($parse_url["query"],$url_query,$url);

//在URL后加page查询信息,但待赋值:

if($url_query) $url.="&page"; else $url.="page";

}else {

$url.="?page";

}

//页码计算:

$lastpg=ceil($totle/$displaypg); //最后页,也是总页数

$page=min($lastpg,$page);

$prepg=$page-1; //上一页

$nextpg=($page==$lastpg ? 0 : $page+1); //下一页

$firstcount=($page-1)*$displaypg;

//开始分页导航条代码:

$pagenav="显示第 <B>".($totle?($firstcount+1):0)."</B>-<B>".min($firstcount+$displaypg,$totle)."</B> 条记录,共 $totle 条记录";

//如果只有一页则跳出函数:

if($lastpg<=1) return false;

$pagenav.=" <a href='$url=1'>首页</a> ";

if($prepg) $pagenav.=" <a href='$url=$prepg'>前页</a> "; else $pagenav.=" 前页 ";

if($nextpg) $pagenav.=" <a href='$url=$nextpg'>后页</a> "; else $pagenav.=" 后页 ";

$pagenav.=" <a href='$url=$lastpg'>尾页</a> ";

//下拉跳转列表,循环列出所有页码:

$pagenav.=" 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n";

for($i=1;$i<=$lastpg;$i++){

if($i==$page) $pagenav.="<option value='$i' selected>$i</option>\n";

else $pagenav.="<option value='$i'>$i</option>\n";

}

$pagenav.="</select> 页,共 $lastpg 页";

}

}

//-------------------------具体演示举例-------------------------------

/*

//(前面程序略)

include("pageft.php"); //包含“pageft.php”文件

//取得总信息数

$result=mysql_query("select * from mytable");

$total=mysql_num_rows($result);

//调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉)。

pageft($total,10);

//现在产生的全局变量就派上用场了:

$result=mysql_query("select * from mytable limit $firstcount,$displaypg ");

while($row=mysql_fetch_array($result)){

//(列表内容略)

}

//输出分页导航条代码:

echo $pagenav;

//(后面程序略)

*/

?>

分页类系列之三

<?php 

class Page { 

    private $total; //查询所有的数据总记录数 

    private $page; //当前第几页 

    private $num; //每页显示记录的条数 

    private $pageNum; //一共多少页 

    private $offset; //从数据库中取记录的开始偏移数 

    function __construct($total, $page=1, $num=5) { 

        $this->total=$total; 

        $this->page=$page; 

        $this->num=$num; 

        $this->pageNum=$this->getPageNum(); 

        $this->offset=$this->getOffset(); 

    } 

    private function getPageNum(){ 

        return ceil($this->total/$this->num); 

    } 

    private function getNextPage() { 

        if($this->page==$this->pageNum) 

        return false; 

        else

        return $this->page+1; 

    } 

    private function getPrevPage() { 

        if($this->page==1) 

        return false; 

        else

        return $this->page-1; 

    } 

    //数据库查询的偏移量 

    private function getOffset() { 

        return ($this->page-1)*$this->num; 

    } 

    //当前页开始的记录数 

    private function getStartNum() { 

        if($this->total==0) 

        return 0; 

        else

        return $this->offset+1; 

    } 

    //当前页结束的记录数 

    private function getEndNum() { 

        return min($this->offset+$this->num,$this->total); 

    } 

    public function getPageInfo(){ 

        $pageInfo=array( 

        "row_total" => $this->total, 

        "row_num" => $this->num, 

        "page_num" => $this->getPageNum(), 

        "current_page" => $this->page, 

        "row_offset" => $this->getOffset(), 

        "next_page" => $this->getNextPage(), 

        "prev_page" => $this->getPrevPage(), 

        "page_start" => $this->getStartNum(), 

        "page_end" => $this->getEndNum() 

        ); 

        return $pageInfo; 

    } 

} 

?>

3种分页类使用起来效率都不错,也都很简单,这里推荐给大家。

PHP 相关文章推荐
学习使用curl采集curl使用方法
Jan 11 PHP
浅谈PHP与C#的值类型指向区别的详解
May 21 PHP
教你如何用php实现LOL数据远程获取
Jun 10 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
Jun 27 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
PHP中使用php://input处理相同name值的表单数据
Feb 03 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
PHP实现转盘抽奖算法分享
Apr 15 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
php去除数组中重复数据
Nov 18 #PHP
php中获取主机名、协议及IP地址的方法
Nov 18 #PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 #PHP
php单态设计模式(单例模式)实例
Nov 18 #PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 #PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 #PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
Nov 18 #PHP
You might like
PHP array_push 数组函数
2009/12/26 PHP
PHP图片验证码制作实现分享(全)
2012/05/10 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
JS前端笔试题分析
2016/12/19 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
Python切片知识解析
2016/03/06 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
Python常用的json标准库
2019/02/19 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
2013年高中生自我评价
2013/10/23 职场文书
建筑经济管理专业求职信分享
2014/01/06 职场文书
初一体育教学反思
2014/01/29 职场文书
师范学院教师自荐书
2014/01/31 职场文书
暑期社会实践证明书
2014/11/17 职场文书
2014年法务工作总结
2014/12/11 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
九九重阳节致辞
2015/07/31 职场文书
讨论nginx location 顺序问题
2022/05/30 Servers