一个功能比较高的分页类(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()
输出内容和样式可以很方便的在类中调整,很简单,有兴趣可以研究一下
查看更多关于一个功能比较高的分页类(for PHP5.x) - php类库的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did29578