PHP設計完美分頁類____PHP

來源:互聯網
上載者:User

以前寫項目的時候寫過分頁類,這次看視頻,這個分頁類挺全的,跟著敲了一遍,覺得還行,寫下來分享。

介紹一下這個分頁類:首頁,尾頁,前一頁,後一頁,頁碼顯示,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>';

結果,就是上面的那個圖,分頁類實現。有問題多多指出,我測試沒問題。

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.