好得很程序员自学网

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

二个php分页程序代码 - php分页

二个php分页程序代码

PHP分页器制作,自动生成分面页码,JS调用函数,分页的原理大致如下,分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page).

有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在mysql里如果要想取出表内某段特定内容可以使用的 T-SQL语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize*($page-1),rows是要显示的记录条数,这里就是$page,也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录.

PHP实例代码如下:

<?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> 

使用方法,代码如下:

$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     class  SubPages{                 private    $each_disNums ; //每页显示的条目数         private    $nums ; //总条目数         private    $current_page ; //当前被选中的页         private    $sub_pages ; //每次显示的页数         private    $pageNums ; //总页数         private    $page_array  =  array (); //用来构造分页的数组         private    $subPage_link ; //每个分页的链接         private    $subPage_type ; //显示分页的类型          /*        __construct是SubPages的构造函数,用来在创建类的时候自动运行.        @$each_disNums   每页显示的条目数        @nums     总条目数        @current_num     当前被选中的页        @sub_pages       每次显示的页数        @subPage_link    每个分页的链接        @subPage_type    显示分页的类型                当@subPage_type=1的时候为普通分页模式              example:   共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]              当@subPage_type=2的时候为经典分页样式              example:   当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]        */        function  __construct( $each_disNums , $nums , $current_page , $sub_pages , $subPage_link , $subPage_type ){         $this ->each_disNums= intval ( $each_disNums );         $this ->nums= intval ( $nums );          if (! $current_page ){          $this ->current_page=1;         } else {          $this ->current_page= intval ( $current_page );         }         $this ->sub_pages= intval ( $sub_pages );         $this ->pageNums= ceil ( $nums / $each_disNums );         $this ->subPage_link= $subPage_link ;          $this ->show_SubPages( $subPage_type );          //echo $this->pageNums."--".$this->sub_pages;        }                        /*         __destruct析构函数,当类不在使用的时候调用,该函数用来释放资源。        */        function  __destruct(){         unset( $each_disNums );         unset( $nums );         unset( $current_page );         unset( $sub_pages );         unset( $pageNums );         unset( $page_array );         unset( $subPage_link );         unset( $subPage_type );        }                /*         show_SubPages函数用在构造函数里面。而且用来判断显示什么样子的分页          */        function  show_SubPages( $subPage_type ){          if ( $subPage_type  == 1){          $this ->subPageCss1();         } elseif  ( $subPage_type  == 2){          $this ->subPageCss2();         }        }                        /*         用来给建立分页的数组初始化的函数。        */        function  initArray(){          for ( $i =0; $i < $this ->sub_pages; $i ++){          $this ->page_array[ $i ]= $i ;         }          return   $this ->page_array;        }                        /*         construct_num_Page该函数使用来构造显示的条目         即使:[1][2][3][4][5][6][7][8][9][10]        */        function  construct_num_Page(){          if ( $this ->pageNums <  $this ->sub_pages){          $current_array = array ();           for ( $i =0; $i < $this ->pageNums; $i ++){            $current_array [ $i ]= $i +1;          }         } else {          $current_array = $this ->initArray();           if ( $this ->current_page <= 3){            for ( $i =0; $i < count ( $current_array ); $i ++){            $current_array [ $i ]= $i +1;           }          } elseif  ( $this ->current_page <=  $this ->pageNums &&  $this ->current_page >  $this ->pageNums -  $this ->sub_pages + 1 ){            for ( $i =0; $i < count ( $current_array ); $i ++){            $current_array [ $i ]=( $this ->pageNums)-( $this ->sub_pages)+1+ $i ;           }          } else {            for ( $i =0; $i < count ( $current_array ); $i ++){            $current_array [ $i ]= $this ->current_page-2+ $i ;           }          }         }                   return   $current_array ;        }                /*        构造普通模式的分页        共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]        */        function  subPageCss1(){         $subPageCss1Str = "" ;         $subPageCss1Str .= "共" . $this ->nums. "条记录," ;         $subPageCss1Str .= "每页显示" . $this ->each_disNums. "条," ;         $subPageCss1Str .= "当前第" . $this ->current_page. "/" . $this ->pageNums. "页 " ;         if ( $this ->current_page > 1){          $firstPageUrl = $this ->subPage_link. "1" ;          $prewPageUrl = $this ->subPage_link.( $this ->current_page-1);          $subPageCss1Str .= "[<a href='$firstPageUrl'>首页</a>] " ;          $subPageCss1Str .= "[<a href='$prewPageUrl'>上一页</a>] " ;         } else  {          $subPageCss1Str .= "[首页] " ;          $subPageCss1Str .= "[上一页] " ;         }                   if ( $this ->current_page <  $this ->pageNums){          $lastPageUrl = $this ->subPage_link. $this ->pageNums;          $nextPageUrl = $this ->subPage_link.( $this ->current_page+1);          $subPageCss1Str .= " [<a href='$nextPageUrl'>下一页</a>] " ;          $subPageCss1Str .= "[<a href='$lastPageUrl'>尾页</a>] " ;         } else  {          $subPageCss1Str .= "[下一页] " ;          $subPageCss1Str .= "[尾页] " ;         }                   echo   $subPageCss1Str ;                 }                        /*        构造经典模式的分页        当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]        */        function  subPageCss2(){         $subPageCss2Str = "" ;         $subPageCss2Str .= "当前第" . $this ->current_page. "/" . $this ->pageNums. "页 " ;                           if ( $this ->current_page > 1){          $firstPageUrl = $this ->subPage_link. "1" ;          $prewPageUrl = $this ->subPage_link.( $this ->current_page-1);          $subPageCss2Str .= "[<a href='$firstPageUrl'>首页</a>] " ;          $subPageCss2Str .= "[<a href='$prewPageUrl'>上一页</a>] " ;         } else  {          $subPageCss2Str .= "[首页] " ;          $subPageCss2Str .= "[上一页] " ;         }                  $a = $this ->construct_num_Page();          for ( $i =0; $i < count ( $a ); $i ++){          $s = $a [ $i ];           if ( $s  ==  $this ->current_page ){           $subPageCss2Str .= "[<span style='color:red;font-weight:bold;'>" . $s . "</span>]" ;          } else {           $url = $this ->subPage_link. $s ;           $subPageCss2Str .= "[<a href='$url'>" . $s . "</a>]" ;          }         }       if ( $this ->current_page <  $this ->pageNums){          $lastPageUrl = $this ->subPage_link. $this ->pageNums;          $nextPageUrl = $this ->subPage_link.( $this ->current_page+1);          $subPageCss2Str .= " [<a href='$nextPageUrl'>下一页</a>] " ;          $subPageCss2Str .= "[<a href='$lastPageUrl'>尾页</a>] " ;         } else  {          $subPageCss2Str .= "[下一页] " ;          $subPageCss2Str .= "[尾页] " ;         }          echo   $subPageCss2Str ;        }     }     ?> 

调用方法,代码如下:

<?php     require_once ( "SubPages.php" );     //每页显示的条数         $page_size =20;     //总条目数         $nums =1024;     //每次显示的页数         $sub_pages =10;     //得到当前是第几页         $pageCurrent = $_GET [ "p" ];        //if(!$pageCurrent) $pageCurrent=1;                 $subPages = new  SubPages( $page_size , $nums , $pageCurrent , $sub_pages , "test.php?p=" ,2);     ?> 

查看更多关于二个php分页程序代码 - php分页的详细内容...

  阅读:64次