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 相关文章推荐
IIS6.0中配置php服务全过程解析
Aug 07 PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 PHP
PHP代码优化的53个细节
Mar 03 PHP
PHP获取网页标题的3种实现方法代码实例
Apr 11 PHP
php+ajax实现无刷新分页的方法
Nov 04 PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 PHP
YII Framework框架教程之日志用法详解
Mar 14 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
PHP7标量类型declare用法实例分析
Sep 26 PHP
常用PHP封装分页工具类
Jan 14 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 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中函数的形参与实参的问题说明
2010/09/01 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
php日期操作技巧小结
2016/06/25 PHP
PHP new static 和 new self详解
2017/02/19 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
零基础php编程好学吗
2019/10/11 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
JavaScript this调用规则说明
2010/03/08 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
原生JS实现无缝轮播图片
2020/06/24 Javascript
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
python实现维吉尼亚加密法
2019/03/20 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
python 从list中随机取值的方法
2020/11/16 Python
澳大利亚最受欢迎的超级商场每日优惠:Catch
2020/11/17 全球购物
室内设计专业个人的自我评价
2013/10/19 职场文书
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
演讲稿怎么写
2014/01/07 职场文书
教师业务学习制度
2014/01/25 职场文书
法学个人求职信范文
2014/01/27 职场文书
教师开学感言
2014/02/14 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
2014年销售工作总结
2014/12/01 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
党员个人总结范文
2015/02/14 职场文书