首页 > 代码库 > php无限分页类

php无限分页类

搞了2个小时,哈哈,自己按照自己的想法把他写出来了!虽然效率有点慢,有些验证的东西也忽略了!

page.class.php

  1 <?php  2 /*  3 *      4 *      5 *      6 */  7 class Pages{  8     public $rows;//每页显示的行数  9     public $sqli;//sqli对象 10     private $result;//结果集对象 11     private $sql_str;//查询字符串 12     public $total_rows;//总的条数 13     public $total_pages;//总的页数 14     private $field_str = ‘‘;//字段的显示 15     private $bottom_str;//表格底部信息 16     private $field_num;//字段数目 17     private $cur_page;//当前页面 18     private $next_page;//下一页 19     private $pre_page;//上一页 20     private $next_link;//下一页链接 21     private $pre_link;//上一页链接 22     private $cur_text;//当前页码 23     private $result_str = ‘‘;//得到结果集字符串 24     private $tb;//需要查询的表格 25     public function __construct($rows,$total_rows,$sqli,$db,$tb){ 26         $this->rows = $rows<=$total_rows?$rows:$total_rows; 27         $this->sqli = $sqli; 28         $this->total_rows = $total_rows; 29         $this->tb = $tb; 30         $this->sqli->select_db($db); 31         $this->setTotalPages(); 32         $this->setPage(); 33         $this->setSqlStr(); 34         $this->setResult(); 35         $this->setFieldStr(); 36         $this->setFieldNum(); 37         $this->setLink(); 38         $this->setBottomStr(); 39         $this->setResultStr(); 40     } 41     private function setTotalPages(){ 42         $this->total_pages = ceil($this->total_rows/$this->rows); 43     } 44     private function setFieldStr(){ 45         $this->field_str .= ‘<tr style="color:red;">‘; 46         while($field_name = $this->result->fetch_field()){ 47             $this->field_str .= ‘<th>‘.$field_name->name.‘</th>‘; 48         } 49         $this->field_str .= ‘</tr>‘; 50     } 51     private function setFieldNum(){ 52         $this->field_num = $this->result->field_count; 53     } 54     private function setBottomStr(){ 55         $this->bottom_str =" 56         <tr style=‘color:blue;‘> 57         <th colspan=‘{$this->field_num}‘> 58         Total rows: {$this->total_rows}&nbsp;&nbsp;&nbsp;Total pages: {$this->total_pages}&nbsp;&nbsp;&nbsp;Per: {$this->rows} Rows/Page 59          60         </th> 61         </tr>"; 62     } 63     private function setSqlStr(){ 64         $start = ($this->cur_page-1)*$this->rows; 65         $this->sql_str = "SELECT * FROM {$this->tb} LIMIT {$start},{$this->rows}"; 66     } 67     private function setResult(){ 68         $this->result = $this->sqli->query($this->sql_str); 69     } 70     private function setPage(){ 71         $this->cur_page = isset($_GET[‘page‘])?$_GET[‘page‘]:1; 72         $this->validatePage(); 73         $np = $this->cur_page + 1; 74         $pp = $this->cur_page - 1; 75         $this->next_page = ($np > $this->total_pages)? $this->total_pages+1 : $np; 76         $this->pre_page = $pp; 77     } 78     private function setLink(){ 79         $link_span = floor($this->field_num / 3); 80         $cur_span = $this->field_num - ($link_span * 2); 81         if($this->next_page >= ($this->total_pages+1)){ 82             $this->next_link = "<th colspan=‘{$link_span}‘><span>MAX</span></th>"; 83         }else{ 84             $this->next_link = "<th colspan=‘{$link_span}‘><a href=http://www.mamicode.com/‘?page={$this->next_page}‘>Next</a></th>"; 85         } 86         if($this->pre_page == 0){ 87             $this->pre_link = "<th colspan=‘{$link_span}‘><span>MIN</span></th>"; 88         }else{ 89             $this->pre_link = "<th colspan=‘{$link_span}‘><a href=http://www.mamicode.com/‘?page={$this->pre_page}‘>Previous</a></th>"; 90         } 91         $this->cur_text = "<th colspan=‘{$cur_span}‘>Page:{$this->cur_page}</th>"; 92     } 93     //验证页码的有效性 94     private function validatePage(){ 95         if($this->cur_page <= 1){ 96             $this->cur_page = 1; 97         } 98         if($this->cur_page >= $this->total_pages){ 99             $this->cur_page = $this->total_pages;    100         }101     }102     private function setResultStr(){103         $j=0;104         while($results = $this->result->fetch_array(MYSQLI_NUM)){105             if($j%2==0){106                 $this->result_str .= ‘<tr style="background:#EEE;">‘;107             }else{108                 $this->result_str .= ‘<tr>‘;109             }110             for($i=0; $i<$this->field_num;$i++){111                 $this->result_str .= "<th>{$results[$i]}</th>";112             }113             $this->result_str .= ‘</tr>‘;114             $j++;115         }116     }117     public function view(){118         $view_str = "<table style=‘border:1px solid black;‘>".$this->field_str.$this->result_str.$this->pre_link.119         $this->cur_text.$this->next_link.$this->bottom_str."</table>";120         echo $view_str;121     }122     public function __destruct(){123         $this->result->free();124         $this->sqli->close();125     }126 }

page.php

 1 <style type="text/css"> 2 th{ 3     width:200px; 4     border:1px solid #ccc; 5 } 6 table{ 7     margin:0px auto; 8 } 9 a{10     text-decoration:none;11 }12 </style>13 <?php14 echo ‘<pre>‘;15 include_once(‘page.class.php‘);16 $rows = 8;17 $total_rows = 40;18 $tb = ‘CHARACTER_SETS‘;19 $db = ‘information_schema‘;20 $sqli = new mysqli(‘localhost‘,‘root‘,‘lf1234‘);21 $page = new Pages($rows,$total_rows,$sqli,$db,$tb);22 $page->view();

技术分享

php无限分页类