1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

不错的php分页类

本帖由 小叶2006-02-08 发布。版面名称:后端开发

  1. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
    PHP:
      <?php 
    /* 
    ** File: class.pagenumber.php 
    ** Class: PageNumber 
    ** Version: none 
    ** Created: 5/12/2004 
    ** Author: Morgan Woo 
    ** Email: [email protected] 
    ** Update:huabing lv
    ** Email:[email protected]
    ** 
    ** Copyright (c) 2004 Mr.Woo .  All rights reserved. 
    */ 
    class Pager
       
    //生成的页码(事实上不用也行) 
       
    var $pageNumber=''
        
       
    //需要分类的条目总数 
        
    var $totalItems=0
        
    //数据连接相关
       
    var $conn;
       var 
    $sql
       
    //每页显示几个条目 
       
    var $itemsPerPage=3
        
       
    //总页数 
       
    var $totalPageNumber=0
       
    //当前页码! 
       
    var   $currentPageNumber=1
        
       
    //一个页面显示几个页码 
       
    var $length=10
        
        
       
    //需要分页的url 
       
    var $url=''
       function 
    Pager($conn,$sql,$currentPageNumber,$itemsPerPage,$length,$url){
         
    $this->currentPageNumber=$currentPageNumber
           
    $this->conn=$conn
           
    $this->sql=$sql;
            
    $this->itemsPerPage=$itemsPerPage;
             
    $this->length=$length
      
    $this->url=$url
      
    $this->url.=(stristr($this->url,'?')!=false)?'&':'?';  //Url里有"?"就加"&"没有就加"?" 
      
    $this->getTotalPageNumber();
       }
        function 
    getTotalItems(){
         
    //for adodb
         
    $rs=$this->conn->Execute($this->sql);
         
    $this->totalItems=$rs->RecordCount();
         return 
    $this->totalItems;
        }
         function 
    getTotalPageNumber(){ 
          
    $this->totalPageNumber=ceil($this->getTotalItems()/$this->itemsPerPage);   
     return 
    $this->totalPageNumber;
       } 

       
    //SQL里 LIMIT start,length 中的起始值 
       
    function getLimitStart(){ 
          
    $start=($this->currentPageNumber-1)*$this->itemsPerPage
          return 
    $start
       } 
       
    //SQL里 LIMIT start,length 中的length 
       
    function getLimitItems(){ 
          return 
    $this->itemsPerPage
       } 
       function 
    getRsPerPage(){
         
    $modiSQL=$this->sql." limit ".$this->getLimitStart()." ,".$this->getLimitItems();
    //偶用的是adodb的说
         
    $modiRS=$this->conn->Execute($modiSQL);
         
    $arr=$modiRS->GetArray();
         return 
    $arr;
       }

       
    //主函数.中文分页 
       
    function getPageNumber(){ 
          if (
    $this->getTotalPageNumber()>1){ 
              
             
    $pageNumber='当前第'.$this->currentPageNumber.'页/共'.$this->totalPageNumber.'页'
              
    //显示第一页和前一页
             
    if ($this->currentPageNumber>1){ 
        
    //第一页
                //First Page 
                
    $pageNumber.="<B><A HREF=".$this->url."page=1>第一页</A> </B> "
       
    //前一页
                //Previous Page 
                
    $pageNumber.="<B><A HREF=".$this->url."page=".($this->currentPageNumber-1).">前一页</A> </B>"
             } 
             
    //The start number is the first number of all pages which show on the current page. 
             
    $startNumber=intval($this->currentPageNumber/$this->length)*$this->length
             
    //Prev N page 
       //交界处
             
    if ($this->currentPageNumber>=$this->length){ 
                
    $pageNumber.="[<B><A HREF=".$this->url."page=".($startNumber-1).">".($startNumber-1)."</A></B>]..."
             } 
              
             
    $leftPageNumber=0
             for (
    $i=$startNumber;$i<=$this->totalPageNumber;$i++){ 
                if (
    $i==0)continue; 
                if (
    $i-$startNumber<$this->length){ 
                   if (
    $i==$this->currentPageNumber){ 
                      
    $pageNumber.="[<b>$i</b>]"
                   }else{ 
                      
    $pageNumber.="[<A HREF=".$this->url."page=".$i.">".$i."</A>]"
                   } 
                }else{ 
                   
    $leftPageNumber=$this->totalPageNumber-$i+1
                   break; 
                } 
             } 
       
    //显示下一个分页列表
             
    if ($leftPageNumber>=1){ 
                
    $pageNumber.="...[<B><A HREF=".$this->url."page=".($startNumber+$this->length).">".($startNumber+$this->length)."</A></B>] "
             } 
              
             if (
    $this->currentPageNumber!=$this->totalPageNumber){ 
                
    //Next page 
                
    $pageNumber.="<B><A HREF=".$this->url."page=".($this->currentPageNumber+1).">下一页</A> </B>"
                
    //Last page 
                
    $pageNumber.="<B><A HREF=".$this->url."page=".$this->totalPageNumber.">最后页</A> </B>"
             } 
              
             
    $this->pageNumber=$pageNumber
             return 
    $this->pageNumber
              
          } 
           
           
       } 
        
     
    //英文分页
    function getPageNumber2(){ 
          if (
    $this->getTotalPageNumber()>1){ 
              
             
    $pageNumber='P'.$this->currentPageNumber.'/'.$this->totalPageNumber.''
              
    //显示第一页和前一页
             
    if ($this->currentPageNumber>1){ 
        
    //第一页
                //First Page 
                
    $pageNumber.="<B><A HREF=".$this->url."page=1>FIRST</A> </B> "
       
    //前一页
                //Previous Page 
                
    $pageNumber.="<B><A HREF=".$this->url."page=".($this->currentPageNumber-1).">PREV</A> </B>"
             } 
             
    //The start number is the first number of all pages which show on the current page. 
             
    $startNumber=intval($this->currentPageNumber/$this->length)*$this->length
             
    //Prev N page 
       //交界处
             
    if ($this->currentPageNumber>=$this->length){ 
                
    $pageNumber.="[<B><A HREF=".$this->url."page=".($startNumber-1).">".($startNumber-1)."</A></B>]..."
             } 
              
             
    $leftPageNumber=0
             for (
    $i=$startNumber;$i<=$this->totalPageNumber;$i++){ 
                if (
    $i==0)continue; 
                if (
    $i-$startNumber<$this->length){ 
                   if (
    $i==$this->currentPageNumber){ 
                      
    $pageNumber.="[<b>$i</b>]"
                   }else{ 
                      
    $pageNumber.="[<A HREF=".$this->url."page=".$i.">".$i."</A>]"
                   } 
                }else{ 
                   
    $leftPageNumber=$this->totalPageNumber-$i+1
                   break; 
                } 
             } 
       
    //显示下一个分页列表
             
    if ($leftPageNumber>=1){ 
                
    $pageNumber.="...[<B><A HREF=".$this->url."page=".($startNumber+$this->length).">".($startNumber+$this->length)."</A></B>] "
             } 
              
             if (
    $this->currentPageNumber!=$this->totalPageNumber){ 
                
    //Next page 
                
    $pageNumber.="<B><A HREF=".$this->url."page=".($this->currentPageNumber+1).">NEXT</A> </B>"
                
    //Last page 
                
    $pageNumber.="<B><A HREF=".$this->url."page=".$this->totalPageNumber.">LAST</A>  </B>"
             } 
              
             
    $this->pageNumber=$pageNumber
             return 
    $this->pageNumber
              
          } 
           
           
       } 
        
    }
    //$currentPageNumber=( isset($_GET['page']) ) ? intval($_GET['page']) : 1; 
    //include("PAGENUMBER/class.pagenumber.php");
    //$pageNumber= new PageNumber($adodbConn,$sql,$currentPageNumber,10,3,3,"test.php");
    //echo $pageNumber->getPageNumber2();
    //echo "<br>";
    //echo $pageNumber->getPageNumber();
    ?>
     
  2. Tameway

    Tameway New Member

    注册:
    2005-09-06
    帖子:
    1,286
    赞:
    8
    发个ASP的吧

    我一直没有简洁高效的ASP分页代码
     
  3. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
    asp的,我经常用的一个,不过不是类的,
    方便倒是非常方便。。
     
  4. Tameway

    Tameway New Member

    注册:
    2005-09-06
    帖子:
    1,286
    赞:
    8
    发发发,谢谢
     
  5. amao

    amao New Member

    注册:
    2005-12-12
    帖子:
    43
    赞:
    0
    我刚用的是两个函数,是在村里刨来的,就不献丑了
     
  6. meibk

    meibk New Member

    注册:
    2006-04-17
    帖子:
    1
    赞:
    0
    收下了,谢谢