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 相关文章推荐
php下实现折线图效果的代码
Apr 28 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
Mar 02 PHP
PHP-redis中文文档介绍
Feb 07 PHP
php增删改查示例自己写的demo
Sep 04 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
php计算一个文件大小的方法
Mar 30 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
php实现简单加入购物车功能
Mar 07 PHP
PHP中模糊查询并关联三个select框
Jun 19 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
Oct 19 PHP
php5.6.x到php7.0.x特性小结
Aug 17 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 jsonp单引号转义
2014/11/23 PHP
php判断文件上传类型及过滤不安全数据的方法
2014/12/17 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
让textarea自动调整大小的js代码
2011/04/12 Javascript
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
python中反射用法实例
2015/03/27 Python
Python全局变量用法实例分析
2016/07/19 Python
浅谈Python处理PDF的方法
2017/11/10 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
python 实现A*算法的示例代码
2018/08/13 Python
浅析python中while循环和for循环
2019/11/19 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
财务管理专业毕业生求职信范文
2013/09/21 职场文书
医院实习接收函
2014/01/12 职场文书
初中家长寄语
2014/04/02 职场文书
集体生日活动方案
2014/08/18 职场文书
实验心得体会
2014/09/05 职场文书
财务经理岗位职责
2015/01/31 职场文书
士兵突击观后感
2015/06/16 职场文书
祝酒词范文
2015/08/12 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP