一個優秀php分頁類和你們分享

之前寫的一個php分頁類,基本上能實現你們一些分頁功能的實現,具體關於怎麼使用你們能夠看看我空間的另外一篇關於,記錄ip和pv的博文,主要是在查詢數據庫時當咱們組織sql語句的時候,加上 limit 就能夠了,若是表單使用get方式也能夠實現搜索結果的分頁顯示,由於在類中已經組織好了URL地址。javascript

  
  
  
  
  1. <?php  
  2. class Page{  
  3.     private $total_rows;   //總記錄數  
  4.     private $total_page;   //總頁數  
  5.     private $onepage_rows//每頁顯示行數  
  6.     private $self_page;    //當前頁  
  7.     private $url;          //URL地址  
  8.     private $page_rows;    //頁碼數量  
  9.     private $start_id;     //當前頁起始ID  
  10.     private $end_id;       //當前頁結束ID  
  11.     private $desc=array();  
  12.  
  13.     /**  
  14.      * 構造函數  
  15.      *   
  16.      * @access  public  
  17.      * @param   integer  $total             總條數  
  18.      * @param   integer  $rows              每頁顯示行數  
  19.      * @param   integer  $page_rows         頁碼數量  
  20.      * @param   string   $desc              分頁文字描述  
  21.      */ 
  22.     function __construct($total,$rows=10,$page_rows=8,$desc=''){  
  23.         $this->total_rows = $total;//總條數  
  24.         $this->onepage_rows = $rows;//每頁顯示行數  
  25.         $this->page_rows = $page_rows;//頁碼數量  
  26.         $this->total_page = ceil($this->total_rows/$this->onepage_rows);//總頁數  
  27.         $this->self_page = min($this->total_page,max((int)@$_GET['page'],1));//當前頁  
  28.         $this->start_id = ($this->self_page-1)*$this->onepage_rows+1;//起始ID  
  29.         $this->end_id = min($this->total_rows,$this->self_page*$this->onepage_rows);  
  30.         $this->url = $this->requestUrl();//配置URL地址  
  31.         $this->desc = $this->desc($desc);//分頁文字描述  
  32.         //var_dump($this->desc);  
  33.     }  
  34.       
  35.     /**  
  36.      * 配置url地址  
  37.      *   
  38.      * @access    private   
  39.      * @return    string       返回配置好的url地址  
  40.      */ 
  41.     private function requestUrl(){  
  42.         /* echo "<pre>";  
  43.           //print_r($_SERVER);  
  44.         echo "</pre>";  
  45.          */ 
  46.         $url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING'];  
  47.         //解析url地址,返回數組  
  48.         $request_arr = parse_url$url );  
  49.         if( isset($request_arr['query']) ){  
  50.             //解析請求參數  
  51.             parse_str($request_arr['query'],$arr);  
  52.             //刪除參數中的page元素  
  53.             unset($arr['page']);  
  54.             //合併路徑及請求參數爲標準的URL地址  
  55.             $url = $request_arr['path'].'?'.http_build_query($arr).'&page=';  
  56.         }else{  
  57.             //沒有請求參數GET的狀況  
  58.             $url = strstr($url'?') ? $url."page=" : $url."?page=";  
  59.         }  
  60.         return $url;  
  61.     }  
  62.       
  63.     /**  
  64.      * 配置 分頁文字描述方法  
  65.      *   
  66.      * @access   private  
  67.      * @param    array     $desc  分頁的描述  
  68.      * @return   array              
  69.      */ 
  70.     private function desc($desc){  
  71.         //默認文字描述  
  72.         $d = array(  
  73.                 "pre"=>"上一頁",  
  74.                 "next"=>"下一頁",  
  75.                 "first"=>"首頁",  
  76.                 "end"=>"末頁",  
  77.                 "unit"=>"條",);  
  78.         ifemptyempty($desc) || !is_array($desc) ){  
  79.             return $d;  
  80.         }  
  81.         //過濾沒有值的數組   
  82.         function filter($v){  
  83.             return !emptyempty($v);  
  84.         }  
  85.         //合併數組  
  86.         return array_merge$d , array_filter($desc,"filter") );  
  87.     }  
  88.     /**  
  89.      * SQL limit語句,控制每頁顯示行數  
  90.      *   
  91.      * @access    public   
  92.      * @return    string  
  93.      */ 
  94.     function limit(){  
  95.         return "LIMIT ".max( 0 , ($this->self_page-1)*$this->onepage_rows ).",".$this->onepage_rows;  
  96.     }   
  97.       
  98.     /**  
  99.      * 上一頁  
  100.      *   
  101.      * @access    public  
  102.      * @return    string  
  103.      */ 
  104.     function pre(){  
  105.         return $this->self_page > 1 ? "<a href='".$this->url.($this->self_page-1)."'>".$this->desc['pre']."</a>" : "";  
  106.     }  
  107.       
  108.  
  109.     /**  
  110.      * 下一頁  
  111.      *  
  112.      * @access    public  
  113.      * @return    string  
  114.      */ 
  115.       
  116.     function next(){  
  117.         return $this->self_page < $this->total_page ? "<a href='".$this->url.($this->self_page+1)."'>".$this->desc['next']."</a>" : "";  
  118.     }  
  119.       
  120.     /**  
  121.      * 首頁  
  122.      *  
  123.      * @access    public  
  124.      * @return    string  
  125.      */ 
  126.     function first(){  
  127.         return $this->self_page > 1 ? "<a href='{$this->url}1'>{$this->desc['first']}</a>" : "";  
  128.     }  
  129.       
  130.     /**  
  131.      * 尾頁  
  132.      *  
  133.      * @access    public  
  134.      * @return    string  
  135.      */ 
  136.     function end(){  
  137.         return $this->self_page < $this->total_page ? "<a href='{$this->url}{$this->total_page}'>{$this->desc['end']}</a>" : "";  
  138.     }  
  139.       
  140.     /**  
  141.      * 當前記錄數  
  142.      *  
  143.      * @access    public  
  144.      * @return    string  
  145.      */ 
  146.     function nowPage(){  
  147.         return "第".$this->start_id."{$this->desc['unit']}-{$this->end_id}{$this->desc['unit']}";  
  148.     }  
  149.       
  150.     /**  
  151.      * 返回當前頁碼  
  152.      *  
  153.      * @access    public  
  154.      * @return    string  
  155.      */ 
  156.     function selfnum(){  
  157.         return $this->self_page;  
  158.     }  
  159.       
  160.     /**  
  161.      * 統計數據信息  
  162.      *  
  163.      * @access    public  
  164.      * @return    string  
  165.      */ 
  166.     function count(){  
  167.         return "<span>總共有: {$this->total_page} 頁&nbsp;&nbsp;總計: {$this->total_rows} 條</span>";  
  168.     }     
  169.       
  170.     /**  
  171.      * 前幾頁  
  172.      *  
  173.      * @access    public  
  174.      * @return    string  
  175.      */ 
  176.     function pres(){  
  177.         $num = $this->self_page - $this->page_rows;  
  178.         return $this->self_page > $this->page_rows ? "<a href='".$this->url.$num."'>".'前'.$this->page_rows.'頁'."</a>" :"";  
  179.     }  
  180.       
  181.     /**  
  182.      * 後幾頁  
  183.      *  
  184.      * @access    public  
  185.      * @return    string  
  186.      */ 
  187.     function nests(){  
  188.         $num = $this->self_page + $this->page_rows;  
  189.         return $this->self_page < $this->total_page - $this->page_rows ? "<a href='{$this->url}$num'>後{$this->page_rows}頁</a>" : "";  
  190.     }  
  191.     /**  
  192.      * 得到頁面數組  
  193.      *  
  194.      * @access    private  
  195.      * @return    string  
  196.      */ 
  197.     private  function pagelist(){  
  198.         $pageList = array();  
  199.         $start = max( 1 , min( $this->self_page - ceil($this->page_rows/2), $this->total_page - $this->page_rows ));  
  200.         $end = min( $this->total_page , $start+$this->page_rows );  
  201.         for$i=$start;$i<=$end;$i++ ){  
  202.             if$i == $this->self_page ){  
  203.                 //變量是當前頁時,去掉連接  
  204.                 $pageList[$i]['url'] = "";  
  205.                 $pageList[$i]['str'] = $i;  
  206.                 continue;  
  207.             }   
  208.             $pageList[$i]['url'] = $this->url.$i;  
  209.             $pageList[$i]['str'] = $i;  
  210.         }  
  211.         return $pageList;  
  212.      }  
  213.        
  214.      /**  
  215.       * 字符串分頁  
  216.       *  
  217.       * @access    public  
  218.       * @return    string  
  219.       */ 
  220.      function strList(){  
  221.          $arr = $this->pagelist();  
  222.          $pageList = "";  
  223.          foreach$arr as $v ){  
  224.              $pageList .= emptyempty($v['url']) ? "<strong>".$v['str']."</strong>" : "<a class='alink' href='{$v['url']}'>{$v['str']}</a>";  
  225.          }  
  226.          return $pageList;  
  227.      }  
  228.        
  229.      /**  
  230.       * 下拉列表分頁  
  231.       *  
  232.       * @access    public  
  233.       * @return    string  
  234.       */ 
  235.      function selectList(){  
  236.         $arr = $this->pagelist();  
  237.         $pageList = "";  
  238.         $pageList .= "<select class='sel' onchange='javascript:location.href = this.options[selectedIndex].value'>";  
  239.         foreach$arr as $v ){  
  240.             $pageList .= emptyempty($v['url']) ? "<option value='{$v['url']}{$v['str']}' selected='selected'>{$v['str']}</option>" : "<option value='{$v['url']}'>{$v['str']}</option>";  
  241.         }  
  242.         $pageList .= "</select>";  
  243.         return $pageList;  
  244.      }   
  245.        
  246.      /**  
  247.       * 直接輸入 跳轉分頁  
  248.       *  
  249.       * @access    public  
  250.       * @return    string  
  251.       */ 
  252.      function inputList(){  
  253.         //相應 enter 鍵盤事件  
  254.         $pageList = "<input type='text' value = '{$this->self_page}' id='pageinput' class='pageinput' onkeydown=\" 
  255.         javascript:if(event.keyCode==13){  
  256.         location.href='{$this->url}'+this.value;  
  257.         };\"/>  
  258.         <button   
  259.         var url = document.getElementById('pageinput').value;  
  260.         location.href='{$this->url}'+url;  
  261.         \"/>  
  262.         跳轉</button>  
  263.         ";  
  264.         return $pageList;  
  265.      }  
  266.        
  267.      /**  
  268.       * 分頁幾種組合樣式  
  269.       *   
  270.       * @param    integer   $style_id   樣式的編號  
  271.       * @return   string  
  272.       */ 
  273.      public function styleList($style_id){  
  274.         switch ($style_id){  
  275.             case 1:  
  276.                 return $this->pre().$this->strlist().$this->next();  
  277.             case 2:  
  278.                 return $this->pre().$this->strlist().$this->next().$this->count();  
  279.             case 3:  
  280.                 return $this->pres().$this->select().$this->nexts();  
  281.         }  
  282.      }  
  283.        
相關文章
相關標籤/搜索