以前寫項目的時候寫過分頁類,這次看視頻,這個分頁類挺全的,跟著敲了一遍,覺得還行,寫下來分享。
介紹一下這個分頁類:首頁,尾頁,前一頁,後一頁,頁碼顯示,GO跳轉頁面。代碼注釋清晰,自己可以調試一下,測試OK。
實現代碼:
<?php class Page{ private $total; //資料表中總記錄數 private $listRows; //每頁顯示行數 private $limit; //限制條數 private $uri; //當前頁的URL private $pageNum; //一共多少頁 private $page; //當前頁 private $config =array('header'=>"記錄","prev"=>"上一頁","next"=>"下一頁","first"=>"首頁","last"=>"尾頁");//顯示配置 private $listNum=5; //同時顯示頁數最多為5頁 /* *$total *$listRows *$pa 預留使用者自己加參 */ public function __construct($total,$listRows=10,$pa=""){ $this->total=$total; //擷取總數 $this->listRows=$listRows; //擷取單頁顯示數 $this->uri=$this->getUri($pa); //擷取過濾掉page後的url $this->page=!empty($_GET["page"])?$_GET["page"]:1; //擷取當前頁,沒有預設1 $this->pageNum=ceil($total/$listRows); //頁數 $this->limit=$this->setLimit(); //擷取limit //var_dump($this); } //設定計算拼湊limit private function setLimit(){ return "limit ".($this->page-1)*$this->listRows." ,". $this->listRows; } //擷取當前頁的url,處理掉url裡面的page參數 private function getUri($pa){ //判斷這個url裡有沒有。號,然後好添加資料 $url = $_SERVER['REQUEST_URI'].(strpos($_SERVER["REQUEST_URI"],'?')?'':"?").$pa; //得到url的數組 Array ( [path] => /pageclass/test.php [query] => page=1 ) $parse =parse_url($url); //判斷是否有參數,幹掉url中的page參數 if(isset($parse['query'])){ //把字串以&拆分成數組 parse_str($parse['query'],$params); //unset掉數組中的page單元,不管有沒有 unset($params["page"]); //再把數組中的索引值以&串連起來成字串 http_build_query($params); //拼接URL $url = $parse['path'].'?'.http_build_query($params); } return $url; } //用它來調用私人變數 function __get($args){ if($args=='limit') return $this->limit; else return null; } /********************處理顯示樣式*********************/ //每頁開始顯示的第一條頁碼 private function start(){ if($this->total == 0) return 0; else if($this->page<=$this->pageNum) return ($this->page-1)*$this->listRows+1; } //每頁開始顯示的最後一條頁碼。主要考慮最後一頁 private function ends(){ if($this->page<=$this->pageNum){ return min($this->page*$this->listRows,$this->total); } } //每頁顯示多少條 private function perNum(){ if($this->page<=$this->pageNum){ return $this->ends() - $this->start() +1; } } //*******頁碼顯示系列 //首頁 private function first(){ if($this->page == 1){ $html=''; }else{ $html=" <a href=".$this->uri."&page=1>".$this->config['first']."</a> "; } return $html; } //前一頁 private function preve(){ if($this->page == 1){ $html=''; }else{ $html=" <a href=".$this->uri."&page=".($this->page-1).">".$this->config['prev']."</a> "; } return $html; } //****頁碼列表**** private function pageList(){ $linkPage=""; $mid=floor($this->listNum/2); for($i=$mid;$i>=1;$i--){ //從當前頁起往前顯示 $page=$this->page-$i; if($page<1){ continue; } $linkPage.=" <a href=".$this->uri.'&page='.$page.">".$page."</a> "; } $linkPage.=" ".$this->page." "; //當前頁 for($i=1;$i<=$mid;$i++){ $page=$this->page + $i; //從當前頁起向後顯示 if($page<=$this->pageNum){ $linkPage.=" <a href=".$this->uri.'&page='.$page.">".$page."</a> "; }else{ break; } } return $linkPage; } //下一頁 private function nexts(){ if($this->page == $this->pageNum){ $html=''; }else{ $html=" <a href=".$this->uri."&page=".($this->page+1).">".$this->config['next']."</a> "; } return $html; } //最後一頁 private function last(){ if($this->page == $this->pageNum){ $html=''; }else{ $html=" <a href=".$this->uri."&page=".($this->pageNum).">".$this->config['last']."</a> "; } return $html; } //**直達那一頁** private function goPage(){ return ' <input type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=\''.$this->uri.'&page=\'+page+\'\'}" value="'.$this->page.'" style="width:25px"><input type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'&page=\'+page+\'\'"> '; } //輸出樣式處理 function fpage($display=array(0,1,2,3,4,5,6,7,8)){ $html[0]=" 共有<b>{$this->total}</b>{$this->config['header']} "; $html[1]=" 本頁顯示<b>{$this->perNum()}</b>條,本頁<b>{$this->start()}-{$this->ends()}</b> "; $html[2]=" <b>"."$this->page/$this->pageNum"."</b> "; $html[3]=$this->first(); $html[4]=$this->preve(); $html[5]=$this->pageList(); $html[6]=$this->nexts(); $html[7]=$this->last(); $html[8]=$this->goPage(); $fpage=''; foreach($display as $index){ $fpage.=$html[$index]; } return $fpage; } }?>
如何使用這個分頁類。
首先建立對象。有三個參數:顯示總數,每頁顯示數,預留傳參(地址欄需要在加參數的情況下使用,可以不用)
$page=new Page($total,$num,"&cid=99"); //建立分頁類對象
$sql="select id,name,price,num,desn from shops order by id ".$page->limit.""; //$page->limit 每次從資料庫如何取數。直接加到你的sql後面
$page->fpage(array(8,3,4,5,6,7,0,1,2)) //調用分頁顯示欄。其中數組中的值就代表每一個小欄目(首頁啊,尾頁啊等等),可以唯寫幾個,順序隨便排
會用這三條,這個類就可以使用了。
顯示一下例子吧
$page=new Page($total,$num,"&cid=99"); //建立分頁類對象$sql="select * from shops order by id {$page->limit}";$result=mysql_query($sql);echo '<table align="center" border="1" width="960">';echo '<caption><h1>SHOPS</h1></caption>';while($row=mysql_fetch_assoc($result)){ echo "<tr>"; echo '<td>'.$row["id"].'</td>'; echo '<td>'.$row['name'].'</td>'; echo '<td>'.$row["price"].'</td>'; echo '<td>'.$row['num'].'</td>'; echo '<td>'.$row["desn"].'</td>'; echo "</tr>";} echo '<tr><td colspan="5" align="right">'.$page->fpage(array(8,3,4,5,6,7,0,1,2)).'</td></tr>';echo '</table>';
結果,就是上面的那個圖,分頁類實現。有問題多多指出,我測試沒問題。