分页类,具备ajax分页功能

 

这个类是我经常使用的一个类,配合jquery实现ajax的分页,非常好用

最近在开发一个web2.0网站,纯ajax效果。。。

 

 

PHP代码
  1. <?php   
  2.   
  3. /*  
  4. PAGE CLASS  
  5. Copyright (C) 2004-2005 Harry Wang  
  6. GNU General Public License 321  
  7. This program is free software; you can  
  8. redistribute it and/or modify it under the  
  9. terms of the GNU General Public License as  
  10. published by the Free Software Foundation;  
  11. either version 2 of the License, or  
  12. (at your option) any later version.  
  13. This program is distributed in the hope that  
  14. it will be useful, but WITHOUT ANY WARRANTY;  
  15. without even the implied warranty of  
  16. MERCHANTABILITY or FITNESS FOR A PARTICULAR  
  17. PURPOSE. See the GNU General Public License  
  18. for more details.  
  19. You should have received a copy of the GNU  
  20. General Public License along with this  
  21. program; if not, write to the Free Software  
  22. Foundation, Inc., 59 Temple Place, Suite 330,  
  23. Boston, MA 02111-1307 USA  
  24. */  
  25. /**  
  26.  * 數據庫分頁類  
  27.  * 這個數據庫分頁類可以使用在帶有ADODB的數據庫中  
  28.  * @author      Weizhen Wang <harry34010493@gmail.com>  
  29.  * @version $Id: page.inc.php,v 1.19 2007/10/15 10:00:05 nbx Exp $  
  30.  * @example  /inc/example/page.example.php  
  31.  * 使用簡介:  
  32.  * $p = new ShowPage(根据?($DB), 表名字, 分頁條數, 具体sql語句(可選));     //建立新對象  
  33.  * $p->SetPageVar(pagecount);   //設置翻頁的標示,默認是’p’  
  34.  * $pVar = $p->GetPageVar();    //返回當前PageVar  
  35.  * $p->GetTotalPageArray();     //生成下拉菜單  
  36.  * $p->GetTotalPage();          //返回總頁數  
  37.  * $p->GetLeftSide();           //返回向左的箭頭  
  38.  * $p->GetRightSide();          //返回向右的箭頭  
  39.  * $p->GetCurrentPage();        //返回當前頁面  
  40.  * $p->GetLimit();              //返回每頁顯示條數            
  41.  * $p->GetRowFrom();            //返回Select語句用的當前Row的位置    E.G."SELECT * FROM SupplierLogin LIMIT " . $p->GetRowFrom() . ", " . $p->GetLimit();  
  42.  * $p->SetVar();                //設置同時需要傳送的參數  
  43.  */  
  44. class ShowPage   
  45. {   
  46.     /**  
  47.      * 左翻頁  
  48.      * @var string  
  49.      */  
  50.     var $outputLeftSide;   
  51.        
  52.     /**  
  53.      * 右翻頁  
  54.      * @var string  
  55.      */  
  56.     var $outputRightSide;   
  57.     var $file;   
  58.        
  59.     /**  
  60.      * 翻頁參數  
  61.      * @var string  
  62.      */  
  63.   
  64.        
  65.     /**  
  66.      * 當前頁  
  67.      * @var int  
  68.      */  
  69.     var $curr;   
  70.     var $varstr;   
  71.     var $tPage;   
  72.        
  73.     /**  
  74.      * 數據庫對象  
  75.      * @var DB  
  76.      */  
  77.     var $DB;   
  78.        
  79.     /**  
  80.      * 數據庫表名  
  81.      * @var string  
  82.      */  
  83.     var $table;   
  84.        
  85.     /**  
  86.      * 每頁顯示的數據條數  
  87.      * @var string  
  88.      */  
  89.     var $limit;   
  90.        
  91.     /**  
  92.      * SQL語句  
  93.      * @var string  
  94.      */  
  95.     var $sqlQuery;   
  96.     var $tPageArray;   
  97.     var $total;   
  98.     var $tRow;   
  99.     var $target = ‘_self’;   
  100.     var $maxPage = 0;   
  101.     /**  
  102.     * Paging style "option" or "listing"  
  103.     */  
  104.     var $style = "listing";   
  105.   
  106.     function ShowPage($DB$maxpage=0, $limit$sqlQuery = ""$pVar=‘p’) {       
  107.         $this->DB       = $DB;   
  108.         $this->table    = $table;   
  109.         $this->limit    = $limit;   
  110.         $this->sqlQuery = $sqlQuery;   
  111.            
  112.         $this->maxPage = ($maxpage>0)?$maxpage:0;   
  113.         $tmpGET = $_GET;   
  114.         $this->pVar = $pVar;   
  115.         //$this->pVar2 = $pVar;   
  116.         //echo $pVar;   
  117.         unset($tmpGET[$this->pVar]);   
  118.         $this->setVar($tmpGET);   
  119.   
  120.   
  121.         $tmpQuery = $sqlQuery;   
  122.   
  123.         //adodb hack start   
  124.   
  125.         if(DB_DRIVER == ‘pdo’)   
  126.         {   
  127.             $rs = $DB->query($tmpQuery);   
  128.             $rs = $DB->query("SELECT FOUND_ROWS()");   
  129.             $tPage = $rs->fetchColumn();   
  130.         }   
  131.         else  
  132.         {   
  133.             $rs = $DB->execute($tmpQueryor die(print_r($DB->ErrorInfo()));   
  134.             $tPage = $rs->RecordCount();   
  135.         }   
  136.         $this->tRow = $tPage;   
  137.   
  138.         $this->tPage = ($this->maxPage>0)?$this->maxPage:ceil($tPage / $this->limit);   
  139.         if ($this->tPage > 0)   
  140.         {   
  141.             for ($i = 1; $i < $this->tPage + 1; $i++)   
  142.             {   
  143.                 $this->tPageArray[] = $i;   
  144.             }   
  145.         }   
  146.         else  
  147.         {   
  148.             $this->tPageArray[] = 0;   
  149.         }   
  150.     }   
  151.   
  152.   
  153.     /**  
  154.      * 設置翻頁參數  
  155.      * @param string $pvar  翻頁參數  
  156.      */  
  157.     function SetPageVar($pvar = ‘p’)   
  158.     {       
  159.         // set type turnpage parameter (E.G. http://www.aa.com/index.php?p=1)   
  160.         $this->pVar = $pvar;   
  161.     }   
  162.   
  163.     /**  
  164.      * 返回總行數  
  165.      * @return  int  
  166.      */  
  167.   
  168.     function GetTotalRow()   
  169.     {   
  170.         return $this->tRow;   
  171.     }   
  172.   
  173.   
  174.     /**  
  175.      * 返回翻頁參數  
  176.      * @return string  
  177.      */  
  178.     function GetPageVar()   
  179.     {   
  180.         return $this->pVar;   
  181.     }   
  182.   
  183.   
  184.     /**  
  185.      * 返回當前頁數  
  186.      * @return int  
  187.      */  
  188.     function GetCurrentPage()   
  189.     {   
  190.         //echo $this->pVar;   
  191.         return  $_GET[$this->pVar];   
  192.     }   
  193.   
  194.   
  195.     /**  
  196.      * 返回總頁數數組  
  197.      * @return array  
  198.      */  
  199.     function GetTotalPageArray()   
  200.     {   
  201.         return $this->tPageArray;   
  202.     }   
  203.   
  204.   
  205.     /**  
  206.      * 返回總頁數  
  207.      * @return int  
  208.      */  
  209.     function GetTotalPage()   
  210.     {   
  211.         return $this->tPage;   
  212.     }   
  213.   
  214.   
  215.     /**  
  216.      * 返回每頁顯示條數  
  217.      * @return int  
  218.      */  
  219.     function GetLimit()   
  220.     {      
  221.         return $this->limit;   
  222.     }   
  223.   
  224.     /**  
  225.      * 返回數據行數  
  226.      * @return  int  
  227.      */  
  228.     function GetRowFrom()   
  229.     {   
  230.         if ($this->GetCurrentPage() <= 1)   
  231.         {   
  232.             return 0;   
  233.         }   
  234.         else  
  235.         {   
  236.             return ($this->GetCurrentPage() – 1) * $this->GetLimit();   
  237.         }   
  238.     }   
  239.   
  240.   
  241.     /**  
  242.      * 返回朝左翻  
  243.      * @return  string  
  244.      */  
  245.     function GetLeftSide()   
  246.     {   
  247.         $current = $_GET[$this->pVar];   
  248.            
  249.            
  250.         if (!$current)   
  251.         {   
  252.             $current = 1;   
  253.         }   
  254.   
  255.         if ($current<1)   
  256.         {   
  257.             $current = 1;   
  258.         }   
  259.   
  260.         if ($current>$this->tPage)   
  261.         {   
  262.             $current = $this->tPage;   
  263.         }   
  264.   
  265.         if ($this->tPage > 1)   
  266.         {   
  267.             $this->outputLeftSide = ;   
  268.             if ($current > 10)   
  269.             {   
  270.                 $this->outputLeftSide = ‘<a href=’.$this->file.‘?’.$this->pVar.‘=1’.($this->varstr).‘ title="First Page" class="p_num" target=’.$this->target.‘>|<</a> ‘;   
  271.             }   
  272.             if ($current > 1)   
  273.             {   
  274.                 $this->outputLeftSide .= ‘<a href=’.$this->file.‘?’.$this->pVar.‘=’.($current-1).($this->varstr).‘ title="Previous Page" class="p_num" target=’.$this->target.‘>上一页</a> ‘;   
  275.             }   
  276.         }   
  277.            
  278.         return str_replace(‘"’, "‘", $this->outputLeftSide);  
  279.     }  
  280.  
  281.       
  282.     /**  
  283.      * 返回朝右翻  
  284.      * @return  string  
  285.      */  
  286.     function GetRightSide() {  
  287.         $current = $_GET[$this->pVar];  
  288.  
  289.         if (!$current) {  
  290.             $current = 1;  
  291.         }  
  292.  
  293.         if ($current>$this->tPage) {  
  294.             $current = $this->tPage;  
  295.         }  
  296.  
  297.         if ($current<1) {  
  298.             $current = 1;  
  299.         }  
  300.  
  301.         if ($this->tPage > 1) {       
  302.             $this->outputRightSide = ‘‘;  
  303.             if ($current<$this->tPage) {  
  304.                 $this->outputRightSide = ‘<a href=‘.$this->file.’?‘.$this->pVar.’=‘.($current+1).($this->varstr).’ title="Next Page" class="p_num" target="‘.$this->target.’">下一页</a> ‘;  
  305.             }  
  306.             if ($this->tPage>10 && ($this->tPage-$current)>=10 ) {  
  307.                 $this->outputRightSide .= ‘<a href=’.$this->file.’?’.$this->pVar.’=’.$this->tPage.($this->varstr).’ title="Last Page" class="p_num" target="‘.$this->target.’">>|</a>’;  
  308.             }  
  309.         }  
  310.           
  311.         return str_replace(‘"‘, "’", $this->outputRightSide);   
  312.     }   
  313.   
  314.        
  315.     /**  
  316.      * 返回一個完整的翻頁選項  
  317.      * 包含了向左翻(<< <), 直接選擇頁面數字, 向右翻(> >>), 和所需要的Javascript  
  318.      * @return string  
  319.      */  
  320.     function GetFullSide() {   
  321.            
  322.         if($this->style == "options")   
  323.         {   
  324.             $sCenter = "<select onChange=’fnJump(this.value)’ name=’select’>\n";   
  325.             $pages = $this->GetTotalPageArray();   
  326.             foreach($pages as $page) {   
  327.                 $selected = "";   
  328.                 if($page == $this->GetCurrentPage())$selected = "selected";   
  329.                 $sCenter .= "   <option value=\"$page\" $selected>$page</option>\n";   
  330.             }   
  331.             $sCenter .= "</select>\n";   
  332.             $sScript = $this->GetTurnPageScript();   
  333.         }   
  334.         else  
  335.         {   
  336.             $sCenter = "";   
  337.             $pages = $this->GetTotalPageArray();   
  338.             foreach($pages as $page) {   
  339.                 if($this->GetCurrentPage()-$page>=4)continue;   
  340.                 if($page >= $this->GetCurrentPage()+4)break;   
  341.                 $sCenter .= "<a href=\"".$_SERVER[‘PHP_SELF’]."?".$this->GetPageVar()."=$page"."&".($this->varstr). "\" class=’p_num’ target=’$this->target’>";   
  342.                 if($page == $this->GetCurrentPage())   
  343.                 {   
  344.                     $sCenter .= "<strong>".$page."</strong>";   
  345.                 }else $sCenter .= $page;   
  346.                 $sCenter .= "</a>\n";   
  347.             }   
  348.             $sScript = "";   
  349.         }   
  350.         $sLeftSide = $this->GetLeftSide();   
  351.         $sRightSide = $this->GetRightSide();   
  352.         return ($sLeftSide ."\n"$sCenter ."\n"$sRightSide ."\n"$sScript);   
  353.     } // end func   
  354.   
  355.        
  356.     /**  
  357.      * 返回Sql語句  
  358.      * @return string  
  359.      */  
  360.     function GetNewSql() {   
  361.         return $this->sqlQuery . " LIMIT " . $this->GetRowFrom() . ", " . $this->GetLimit();   
  362.     } // end func   
  363.   
  364.        
  365.     /**  
  366.      * 返回翻頁時所需的Javascript  
  367.      * @return string  
  368.      */  
  369.     function GetTurnPageScript() {   
  370.         return  "<SCRIPT LANGUAGE=\"JavaScript\">\n" .    
  371.                 "<!–\n" .    
  372.                 "function fnJump(page)\n" .    
  373.                 "{\n" .   
  374.                 "location.href=’".$_SERVER[‘PHP_SELF‘]."?" . $this->GetPageVar() ."=’+page" . "+’".($this->varstr) . "’;\n" .    
  375.                 "}\n" .    
  376.                 "//–>\n" .    
  377.                 "</SCRIPT>\n";   
  378.     } // end func   
  379.   
  380.        
  381.     /**  
  382.      * 設置其它參數  
  383.      * 設置翻頁時需要通過用GET方法一同傳送過去的其他參數  
  384.      * @param  array $data  
  385.      */  
  386.     function setVar($data) {       
  387.         // set the turnpage addition value need to transfer by get mode   
  388.         foreach ($data as $k=>$v) {   
  389.             $this->varstr.=‘&’.$k.‘=’.urlencode($v);   
  390.         }   
  391.     }   
  392.   
  393.   
  394. }   
  395.   
  396.   
  397.   
  398.   
  399.   
  400. class ajax_ShowPage extends ShowPage   
  401. {   
  402.     var $func;   
  403.     var $currentpage;   
  404.     function ajax_ShowPage($DB$table$limit$sqlQuery = ""$function=‘ShowPage([page])’$currentpage$target=)   
  405.     {   
  406.         $this->ShowPage($DB$table$limit$sqlQuery);   
  407.         $this->func = $function;   
  408.         $this->currentpage = ($currentpage)?$currentpage:1;   
  409.         $this->target = $target;   
  410.     }   
  411.   
  412.   
  413.     function ajaxGetCurrentPage()   
  414.     {   
  415.         return $this->currentpage;   
  416.     }   
  417.   
  418.   
  419.     function ajaxGetRowFrom()   
  420.     {   
  421.         if ($this->ajaxGetCurrentPage() <= 1) {   
  422.             return 0;   
  423.         }   
  424.         else {   
  425.             return ($this->ajaxGetCurrentPage() – 1) * $this->GetLimit();   
  426.         }   
  427.     }   
  428.   
  429.        
  430.   
  431.     function ajaxGetNewSql()   
  432.     {   
  433.         return $this->sqlQuery . " LIMIT " . $this->ajaxGetRowFrom() . ", " . $this->GetLimit();   
  434.     }   
  435.   
  436.     function ajaxLeftSide() {   
  437.         $current = $this->currentpage;   
  438.         //echo $current ;   
  439.            
  440.         if (!$current) {   
  441.             $current = 1;   
  442.         }   
  443.   
  444.         if ($current<1) {   
  445.             $current = 1;   
  446.         }   
  447.   
  448.         if ($current>$this->tPage) {   
  449.             $current = $this->tPage;   
  450.         }   
  451.   
  452.         if ($this->tPage > 0) {               
  453.             //if ($current > 10) {   
  454.                 $this->outputLeftSide = ‘<a href="JavaScript:’.$this->func."(‘1’)".’"  title="" class="p_num" target="_self">第一页</a> ‘;   
  455.             //}   
  456.             if ($current > 1) {   
  457.                 $this->outputLeftSide.= ‘<a href="JavaScript:’.$this->func."(".($current-1).")".’" title="" class="p_num" target="_self">上一页</a> ‘;   
  458.             }else{   
  459.                 $this->outputLeftSide.= ‘<a href="JavaScript:’.$this->func."(".($current).")".’" title="" class="p_num" target="_self">上一页</a> ‘;   
  460.             }   
  461.         }   
  462.            
  463.         return $this->outputLeftSide;   
  464.     }   
  465.   
  466.   
  467.     function ajaxRightSide() {   
  468.         $current = $this->currentpage;   
  469.            
  470.         if (!$current) {   
  471.             $current = 1;   
  472.         }   
  473.   
  474.         if ($current<1) {   
  475.             $current = 1;   
  476.         }   
  477.   
  478.         if ($current>$this->tPage) {   
  479.             $current = $this->tPage;   
  480.         }   
  481.   
  482.         if ($this->tPage > 0) {               
  483.             if ($current<$this->tPage) {   
  484.                 $this->outputRightSide = ‘<a href="JavaScript:’.$this->func.‘(\”.($current+1).‘\’)" title="Next Page" class="p_num" target="_self">下一页</a> ‘;   
  485.             }else{   
  486.                 $this->outputRightSide = ‘<a href="JavaScript:’.$this->func.‘(\”.($current).‘\’)" title="Next Page" class="p_num" target="_self">下一页</a> ‘;   
  487.             }   
  488.            // if ($this->tPage>10 && ($this->tPage-$current)>=10 ) {   
  489.                 $this->outputRightSide .= ‘<a href="JavaScript:’.$this->func.‘(\”.$this->tPage.‘\’)"  title="Next 10 Page" class="p_num" target="_self">最后</a>’;   
  490.             //}   
  491.         }   
  492.            
  493.         return $this->outputRightSide;   
  494.     }   
  495.        
  496.        
  497.     function ajaxGetFullSide() {   
  498.         $sLeftSide = $this->ajaxLeftSide();   
  499.         $sRightSide = $this->ajaxRightSide();   
  500.         if($this->style == "options")   
  501.         {   
  502.             $sCenter = "<select onChange=’fnJump(this.value)’ name=’select’>\n";   
  503.             $pages = $this->GetTotalPageArray();   
  504.             foreach($pages as $page) {   
  505.                 $selected = "";   
  506.                 if($page == $this->ajaxGetCurrentPage())$selected = "selected";   
  507.                 $sCenter .= "   <option value=\"$page\" $selected>$page</option>\n";   
  508.             }   
  509.             $sCenter .= "</select>\n";   
  510.             $sScript = $this->ajaxGetTurnPageScript();   
  511.         }   
  512.         else  
  513.         {   
  514.             $sCenter = "";   
  515.             $pages = $this->GetTotalPageArray();   
  516.             foreach($pages as $page) {   
  517.                 if($this->currentpage-$page>=5)continue;   
  518.                 if($page >= $this->currentpage+5&$this->tPage-$page>2)continue;   
  519.                 $sCenter .= ‘<a href="JavaScript:’.$this->func."(‘".$page."’)".’" class="p_num" target="_self">’;   
  520.                 //echo $this->GetCurrentPage();   
  521.                 if($page ==$this->currentpage)   
  522.                 {   
  523.                     $sCenter .= "<strong><font color=red>".$page."</font></strong>";   
  524.                 }else $sCenter .= $page;   
  525.                 $sCenter .= "</a>\n";   
  526.             }   
  527.             $sScript = "";   
  528.         }   
  529.         return ($sLeftSide ."\n"$sCenter ."\n"$sRightSide ."\n"$sScript);   
  530.     }    
  531.   
  532.   
  533.   
  534.     function ajaxGetTurnPageScript()   
  535.     {   
  536.         return  "<SCRIPT LANGUAGE=\"JavaScript\">\n" .    
  537.                 "<!–\n" .    
  538.                 "function fnJump(page)\n" .    
  539.                 "{\n" .   
  540.                 "   ".$this->func."(page);\n" .    
  541.                 "}\n" .    
  542.                 "//–>\n" .    
  543.                 "</SCRIPT>\n";   
  544.     } // end func   
  545.   
  546. }   
  547. ?>  

分页类,具备ajax分页功能》有一个想法

评论已关闭。