好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

一个功能比较高的分页类(for PHP5.x) - php类库

一个功能比较高的分页类(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类库的详细内容...

  阅读:45次