一个功能比较高的分页类(for PHP5.x)
怕水平的不高,所以从来没有放过任何代码,这个类我已经用了很久,近来用面向对象方法重写,适用于PHP5.x,特地扔出,不怕见笑,希望抛砖引玉。
这个类适用于配合数据库查询分页,和数组分页,下面有使用方法。
- /*
 - * 名称: 分页类
 - * 介绍: 适用于数组分页和配合sql查询的分页
 - * 作者: idlion || Moonfly
 - * 创建时间: 20060218
 - * 最后修改: 20070524
 - */
 - class PageBreak {
 - private $mTotalRowsNum = 0; // 总信息行数
 - private $mCurPageNumber = 1; // 当前所在页
 - private $mTotalPagesNum = 1; // 总页数
 - private $mQueryString; // 页面传递的数据(url?后的字符串)
 - private $mPageRowsNum = 20; // 每页显示行数
 - private $mIndexBarLength = 5; // 索引条的页数
 - private $mIndexBar = ''; // 页码索引条
 - private $mPageInfo = ''; // 分页信息
 - // 页码索引条样式
 - private $mNextButton = "8";
 - private $mPreButton = "7";
 - private $mFirstButton = "9";
 - private $mLastButton = ":";
 - private $mCssIndexBarCurPage = "fontweight: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>mTotalRowsNum1)/$this>mPageRowsNum )+1 );
 - }
 - // 计算当前页数
 - private function SetCurPageNumber() {
 - if( $_GET['cur_page'] ) {
 - $this>mCurPageNumber = $_GET['cur_page'];
 - }
 - }
 - // 修正Sql截取语句
 - private function SetSqlQuery(&$rSqlQuery) {
 - $start_number = ($this>mCurPageNumber1)*$this>mPageRowsNum;
 - $rSqlQuery .= " LIMIT ".$start_number.",".$this>mPageRowsNum;
 - }
 - // 修正截取后的Array
 - private function SetArray(&$rArray) {
 - $start_number = ($this>mCurPageNumber1)*$this>mPageRowsNum;
 - $rArray = array_slice($rArray, $start_number, $this>mPageRowsNum);
 - }
 - // 修正 $_GET 传递数据
 - private function SetQueryString() {
 - $query_string = $_SERVER['QUERY_STRING'];
 - if ( $query_string == '' ) {
 - $this>mQueryString = "?cur_page=";
 - }
 - else {
 - $this>mQueryString = preg_replace("/&?cur_page=d+/", '', $query_string);
 - $this>mQueryString = "?".$this>mQueryString."&cur_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>mIndexBarLength1;
 - }
 - $last_number;
 - for( $i=$first_number; $i<=$last_number; $i++ ) {
 - if( $this>mCurPageNumber == $i ) {
 - $page_index .= "".$i." ";
 - }
 - else {
 - $page_index .= "".$i." ";
 - }
 - }
 - 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 "".$this>mFirstButton." ";
 - }
 - // 得到页码索引条 上一页按钮
 - private function GetNavPreButton() {
 - if( $this>mCurPageNumber>1 ) {
 - $pre_number = $this>mCurPageNumber1;
 - }
 - else {
 - $pre_number = 1;
 - }
 - return "".$this>mPreButton." ";
 - }
 - // 得到页码索引条 下一页按钮
 - private function GetNavNextButton() {
 - if( $this>mCurPageNumbermTotalPagesNum ) {
 - $next_number = $this>mCurPageNumber+1;
 - }
 - else {
 - $next_number = $this>mTotalPagesNum;
 - }
 - return "".$this>mNextButton." ";
 - }
 - // 得到页码索引条 末页按钮
 - private function GetNavLastButton() {
 - return "".$this>mLastButton." ";
 - }
 - // 设置分页信息
 - private function SetPageInfo() {
 - $this>mPageInfo ="";
 - $this>mPageInfo .= "共 ".$this>mTotalRowsNum." 条信息 | ";
 - $this>mPageInfo .= "".$this>mPageRowsNum." 条/页 | ";
 - $this>mPageInfo .= "共 ".$this>mTotalPagesNum." 页 | ";
 - $this>mPageInfo .= "第 ".$this>mCurPageNumber." 页";
 - $this>mPageInfo .= "";
 - }
 - // 取出页码索引条
 - public function GetIndexBar() {
 - return $this>mIndexBar;
 - }
 - // 取出分页信息
 - public function GetPageInfo() {
 - return $this>mPageInfo;
 - }
 - }
 - ?>
 
代码用法1: 配合数据库使用(例子中配合的是我自己的数据库操作类和模版类)
- // 这是一个sql查询语句,我们来对它的查询结果作出分页
 - $sql = "select * from member";
 - // 读取分页类
 - require_once("pagebreak.php");
 - // 分页初始化
 - // $sql就是上面的查询语句
 - // 20是每页显示的数量
 - // 通过分页类的初始化,这个查询语句就被加上" limit ...... "
 - $pagebreak = new PageBreak($sql, 20);
 - // 生成分页索引导航条
 - $navbar = $pagebreak>GetPageInfo().$pagebreak>GetIndexBar();
 - // 查询的结果(这里用我自己的类,不多说了)
 - $result = $db>GetFieldsArray($sql)
 - // 输出查询结果
 - var_dump($result);
 - // 输出分页索引导航条
 - echo $navbar;
 
代码用法2: 配合要输出的数组
- // 这是一个sql查询语句,并得到查询结果
 - $sql = "select * from member";
 - $result = $db>GetFieldsArray($sql);
 - // 读取分页类
 - require_once("pagebreak.php");
 - // 分页初始化
 - // $result就是上面的查询后得到的结果
 - // 20是每页显示的数量
 - // 通过分页类的初始化,这个结果数组被自动截取成相应页的信息内容
 - $pagebreak = new PageBreak($result, 20);
 - // 生成分页索引导航条
 - $navbar = $pagebreak>GetPageInfo().$pagebreak>GetIndexBar();
 - // 输出查询结果
 - var_dump($result);
 - // 输出分页索引导航条
 - echo $navbar;
 
下面是输出样式:
前半部分信息条,是$pagebreak>GetPageInfo()
后半部分分页索引导航,是$pagebreak>GetIndexBar()
输出内容和样式可以很方便的在类中调整,很简单,有兴趣可以研究一下