好得很程序员自学网

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

PHP中常用的分页类总结 - php分页

PHP中常用的分页类总结

php分页是目前在显示大量结果时所采用的最好的方式,有了下面这些代码的帮助,开发人员可以在多个页面中显示大量的数据,在互联网上,分?页是一般用于搜索结果或是浏览全部信息.

php基本分页,代码如下:

<?php  // database connection info   $conn  = mysql_connect( 'localhost' , 'dbusername' , 'dbpass' )  or  trigger_error( "SQL" , E_USER_ERROR);  $db  = mysql_select_db( 'dbname' , $conn )  or  trigger_error( "SQL" , E_USER_ERROR);    // find out how many rows are in the table    $sql  =  "SELECT COUNT(*) FROM numbers" ;  $result  = mysql_query( $sql ,  $conn )  or  trigger_error( "SQL" , E_USER_ERROR);  $r  = mysql_fetch_row( $result );  $numrows  =  $r [0];    // number of rows to show per page   $rowsperpage  = 10;  // find out total pages   $totalpages  =  ceil ( $numrows  /  $rowsperpage );    // get the current page or set a default   if  (isset( $_GET [ 'currentpage' ]) &&  is_numeric ( $_GET [ 'currentpage' ])) {  // cast var as int   $currentpage  = (int)  $_GET [ 'currentpage' ];  }  else  {  // default page num   $currentpage  = 1;  }  // end if     // if current page is greater than total pages...   if  ( $currentpage  >  $totalpages ) {  // set current page to last page   $currentpage  =  $totalpages ;  }  // end if   // if current page is less than first page...   if  ( $currentpage  < 1) {  // set current page to first page   $currentpage  = 1;  }  // end if     // the offset of the list, based on current page    $offset  = ( $currentpage  - 1) *  $rowsperpage ;    // get the info from the db    $sql  =  "SELECT id, number FROM numbers LIMIT $offset, $rowsperpage" ;  $result  = mysql_query( $sql ,  $conn )  or  trigger_error( "SQL" , E_USER_ERROR);    // while there are rows to be fetched...   while  ( $list  = mysql_fetch_assoc( $result )) {  // echo data   echo   $list [ 'id' ] .  " : "  .  $list [ 'number' ] .  "<br />" ;  }  // end while     /****** build the pagination links ******/   // range of num links to show   $range  = 3;    // if not on page 1, don't show back links   if  ( $currentpage  > 1) {  // show << link to go back to page 1   echo   " <a href='{$_SERVER['PHP_SELF']}?currentpage=1'><<</a> " ;  // get previous page num   $prevpage  =  $currentpage  - 1;  // show < link to go back to 1 page   echo   " <a href='{$_SERVER['PHP_SELF']}?currentpage=$prevpage'><</a> " ;  }  // end if     // loop to show links to range of pages around current page   for  ( $x  = ( $currentpage  -  $range );  $x  < (( $currentpage  +  $range ) + 1);  $x ++) {  // if it's a valid page number...   if  (( $x  > 0) && ( $x  <=  $totalpages )) {  // if we're on current page...   if  ( $x  ==  $currentpage ) {  // 'highlight' it but don't make a link   echo   " [<b>$x</b>] " ;  // if not current page...   }  else  {  // make it a link   echo   " <a href='{$_SERVER['PHP_SELF']}?currentpage=$x'>$x</a> " ;  }  // end else   }  // end if    }  // end for     // if not on last page, show forward and last page links    if  ( $currentpage  !=  $totalpages ) {  // get next page   $nextpage  =  $currentpage  + 1;  // echo forward link for next page    echo   " <a href='{$_SERVER['PHP_SELF']}?currentpage=$nextpage'>></a> " ;  // echo forward link for lastpage   echo   " <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'>>></a> " ;  }  // end if   /****** end build pagination links ******/   ?> 

先看一个常用的php分页类,代码如下:

<?php    /*     Place code to connect to your DB here.    */     include ( 'config.php' );  // include your code to connect to DB.       $tbl_name = "" ;   //your table name     // How many adjacent pages should be shown on each side?     $adjacents  = 3;      /*        First get total number of rows in data table.        If you have a WHERE clause in your query, make sure you mirror it here.    */     $query  =  "SELECT COUNT(*) as num FROM $tbl_name" ;    $total_pages  = mysql_fetch_array(mysql_query( $query ));    $total_pages  =  $total_pages [num];      /* Setup vars for query. */     $targetpage  =  "filename.php" ;   //your file name  (the name of this file)     $limit  = 2;          //how many items to show per page     $page  =  $_GET [ 'page' ];    if ( $page )      $start  = ( $page  - 1) *  $limit ;     //first item to display on this page     else      $start  = 0;         //if no page var is given, set start to 0       /* Get data. */     $sql  =  "SELECT column_name FROM $tbl_name LIMIT $start, $limit" ;    $result  = mysql_query( $sql );      /* Setup page vars for display. */     if  ( $page  == 0)  $page  = 1;      //if no page var is given, default to 1.     $prev  =  $page  - 1;        //previous page is page - 1     $next  =  $page  + 1;        //next page is page + 1     $lastpage  =  ceil ( $total_pages / $limit );   //lastpage is = total pages / items per page, rounded up.     $lpm1  =  $lastpage  - 1;       //last page minus 1       /*      Now we apply our rules and draw the pagination object.      We're actually saving the code to a variable in case we want to draw it more than once.    */     $pagination  =  "" ;    if ( $lastpage  > 1)   {      $pagination  .=  "<div class=" pagination ">" ;     //previous button      if  ( $page  > 1)       $pagination .=  "<a href=" $targetpage ?page= $prev ">? previous</a>" ;     else       $pagination .=  "<span class=" disabled ">? previous</span>" ;          //pages       if  ( $lastpage  < 7 + ( $adjacents  * 2))  //not enough pages to bother breaking it up     {       for  ( $counter  = 1;  $counter  <=  $lastpage ;  $counter ++)     {       if  ( $counter  ==  $page )        $pagination .=  "<span class=" current ">$counter</span>" ;       else         $pagination .=  "<a href=" $targetpage ?page= $counter ">$counter</a>" ;          }    }     elseif ( $lastpage  > 5 + ( $adjacents  * 2))  //enough pages to hide some     {      //close to beginning; only hide later pages       if ( $page  < 1 + ( $adjacents  * 2))       {       for  ( $counter  = 1;  $counter  < 4 + ( $adjacents  * 2);  $counter ++)      {        if  ( $counter  ==  $page )         $pagination .=  "<span class=" current ">$counter</span>" ;        else          $pagination .=  "<a href=" $targetpage ?page= $counter ">$counter</a>" ;           }       $pagination .=  "..." ;       $pagination .=  "<a href=" $targetpage ?page= $lpm1 ">$lpm1</a>" ;       $pagination .=  "<a href=" $targetpage ?page= $lastpage ">$lastpage</a>" ;       }      //in middle; hide some front and some back       elseif ( $lastpage  - ( $adjacents  * 2) >  $page  &&  $page  > ( $adjacents  * 2))     {       $pagination .=  "<a href=" $targetpage ?page=1 ">1</a>" ;       $pagination .=  "<a href=" $targetpage ?page=2 ">2</a>" ;       $pagination .=  "..." ;       for  ( $counter  =  $page  -  $adjacents ;  $counter  <=  $page  +  $adjacents ;  $counter ++)      {        if  ( $counter  ==  $page )         $pagination .=  "<span class=" current ">$counter</span>" ;        else          $pagination .=  "<a href=" $targetpage ?page= $counter ">$counter</a>" ;           }       $pagination .=  "..." ;       $pagination .=  "<a href=" $targetpage ?page= $lpm1 ">$lpm1</a>" ;       $pagination .=  "<a href=" $targetpage ?page= $lastpage ">$lastpage</a>" ;       }      //close to end; only hide early pages       else      {       $pagination .=  "<a href=" $targetpage ?page=1 ">1</a>" ;       $pagination .=  "<a href=" $targetpage ?page=2 ">2</a>" ;       $pagination .=  "..." ;       for  ( $counter  =  $lastpage  - (2 + ( $adjacents  * 2));  $counter  <=  $lastpage ;  $counter ++)      {        if  ( $counter  ==  $page )         $pagination .=  "<span class=" current ">$counter</span>" ;        else          $pagination .=  "<a href=" $targetpage ?page= $counter ">$counter</a>" ;           }     }    }         //next button      if  ( $page  <  $counter  - 1)       $pagination .=  "<a href=" $targetpage ?page= $next ">next ?</a>" ;     else       $pagination .=  "<span class=" disabled ">next ?</span>" ;     $pagination .=  "</div>n" ;     } //开源代码phpfensi.com   ?>     <?php     while ( $row  = mysql_fetch_array( $result ))    {       // Your while loop here       }   ?>    <?= $pagination ?> 

实例代码如下:

<?php  class  PageView{       /**页码**/        public   $pageNo  = 1;       /**页大小**/        public   $pageSize  = 20;       /**共多少页**/        public   $pageCount  = 0;       /**总记录数**/        public   $totalNum  = 0;       /**偏移量,当前页起始行**/        public   $offSet  = 0;       /**每页数据**/        public   $pageData  =  array ();             /**是否有上一页**/        public   $hasPrePage  = true;       /**是否有下一页**/        public   $hasNextPage  = true;             public   $pageNoList  =  array ();             public   $jsFunction  = 'jsFunction' ;       /**        *         * @param unknown_type $count 总行数        * @param unknown_type $size 分页大小        * @param unknown_type $string        */        public   function  __construct( $count =0,  $size =20, $pageNo =1, $pageData  = array (), $jsFunction = 'jsFunction' ){             $this ->totalNum =  $count ; //总记录数            $this ->pageSize =  $size ; //每页大小            $this ->pageNo =  $pageNo ;           //计算总页数            $this ->pageCount =  ceil ( $this ->totalNum/ $this ->pageSize);           $this ->pageCount = ( $this ->pageCount<=0)?1: $this ->pageCount;           //检查pageNo            $this ->pageNo =  $this ->pageNo == 0 ? 1 :  $this ->pageNo;           $this ->pageNo =  $this ->pageNo >  $this ->pageCount?  $this ->pageCount :  $this ->pageNo;                     //计算偏移            $this ->offset = (  $this ->pageNo - 1 ) *  $this ->pageSize;           //计算是否有上一页下一页            $this ->hasPrePage =  $this ->pageNo == 1 ?false:true;             $this ->hasNextPage =  $this ->pageNo >=  $this ->pageCount ?false:true;                     $this ->pageData =  $pageData ;           $this ->jsFunction =  $jsFunction ;                }       /**        * 分页算法        * @return        */        private   function  generatePageList(){           $pageList  =  array ();           if ( $this ->pageCount <= 9){               for ( $i =0; $i < $this ->pageCount; $i ++){                   array_push ( $pageList , $i +1);              }          } else {               if ( $this ->pageNo <= 4){                   for ( $i =0; $i <5; $i ++){                       array_push ( $pageList , $i +1);                  }                   array_push ( $pageList ,-1);                   array_push ( $pageList , $this ->pageCount);                } else   if ( $this ->pageNo >  $this ->pageCount - 4){                   array_push ( $pageList ,1);                                     array_push ( $pageList ,-1);                   for ( $i =5; $i >0; $i --){                       array_push ( $pageList , $this ->pageCount -  $i +1);                  }              } else   if ( $this ->pageNo > 4 &&  $this ->pageNo <=  $this ->pageCount - 4){                   array_push ( $pageList ,1);                   array_push ( $pageList ,-1);                                     array_push ( $pageList , $this ->pageNo -2);                   array_push ( $pageList , $this ->pageNo -1);                   array_push ( $pageList , $this ->pageNo);                   array_push ( $pageList , $this ->pageNo + 1);                   array_push ( $pageList , $this ->pageNo + 2);                                     array_push ( $pageList ,-1);                   array_push ( $pageList , $this ->pageCount);                                }          }           return   $pageList ;      }         /***        * 创建分页控件       * @param       * @return String       */        public   function  echoPageAsDiv(){           $pageList  =  $this ->generatePageList();                     $pageString  = "<div class='pagination'><div class='page-bottom'>" ;                 if (! empty empty ( $pageList )){               if ( $this ->pageCount >1){                   if ( $this ->hasPrePage){                       $pageString  =  $pageString  . "<a class='page-next' href=" javascript: " .$this->jsFunction . " ( " . ($this->pageNo-1) . " ) ">上一页</a>" ;                  }                   foreach  ( $pageList   as   $k => $p ){                       if ( $this ->pageNo ==  $p ){                           $pageString  =  $pageString  . "<span class='page-cur'>"  .  $this ->pageNo .  "</span>" ;                           continue ;                      }                       if ( $p  == -1){                           $pageString  =  $pageString  . "<span class='page-break'>...</span>" ;                           continue ;                      }                       $pageString  =  $pageString  . "<a href=" javascript: " .$this->jsFunction . " ( " . $p . " ) ">"  .  $p  .  "</a>" ;                  }                                     if ( $this ->hasNextPage){                       $pageString  =  $pageString  . "<a class='page-next' href=" javascript: " .$this->jsFunction . " ( " . ($this->pageNo+1) . " ) ">下一页</a>" ;                  }                                }          }           $pageString  =  $pageString  .( "</div></div>" );           return   $pageString ;      }  }    ?> 

css代码如下:

<style type= "text/css" >  <!--  .pagination { font-family :  Tahoma ; overflow :  hidden ;  padding-top :  12px ;  text-align :  center ;}  .pagination-tab {  margin-bottom :  20px ;}  .pagination a, .pagination .page-cur, .pagination .page-prev_g, .pagination .page-prev, .pagination .page-next, .pagination .page-next_g, .pagination .page-break, .pagination .page-skip {       display : inline- block ; font-family :  Tahoma ,SimSun, Arial ;  height :  22px ; line-height : 22px ;  margin :  0 ;  min-width :  16px ; padding :  0 5px ;  text-align :  center ;  vertical-align :  top ;  white-space :  nowrap ;}  .pagination a, .pagination .page-prev_g, .pagination .page-prev, .pagination .page-next, .pagination .page-next_g, .pagination .page-cur, .pagination .page-break {       border :  1px   solid   #ed3d83 ;  color : #e9357d ;  font-weight : bold ;}  .pagination a:hover {  border :  1px   solid   #ed3d83 ; text-decoration :  none ;  background-color : #f95f9d ;  color : #fff ;}  .pagination .page-prev_g, .pagination .page-prev, .pagination .page-next, .pagination .page-next_g {  width :  36px ;  background-image :  url ( static /img/page.gif);}  .pagination .page-prev {  background-position :  -0px   -38px ;  padding-left :  16px ;}  .pagination .page-prev_g {  background-position : 0px   -59px ;  padding-left :  16px ;  color : #cbcbcb ;  font-weight : normal ;}  .pagination .page-next {  background-position :  0px   0px ;  padding-right :  16px ;  font-weight : normal ;}  .pagination .page-next_g {  background-position :  -0px   -19px ;  padding-right :  16px ;  color : #cbcbcb ;}  .pagination .page-cur { background-color :  #f95f9d ;  border :  1px   solid   #ed3d83 ; color :  #fff ; font-weight :  bold ;}  .pagination .page-break { border :  medium   none ;  background : none   transparent ;  color : #333 ;}    -->  </style> 

在php页面中的调用方法,代码如下:

$pageNo  =  $_GET [ 'pageNo' ];           if ( empty empty ( $pageNo )){               $pageNo  = 1;          }           //分页数据            $pageData  = News::getNewsPage( $pageNo , $pageSize );          //取得总行数            $count  = News::getNewsCount();           //创建分页器            $p  =  new  PageView( $count [ '0' ][ 'TOTAL' ], $pageSize , $pageNo , $pageData );        //生成页码            $pageViewString  =  $p ->echoPageAsDiv(); 

查看更多关于PHP中常用的分页类总结 - php分页的详细内容...

  阅读:70次