PHP物件導向(OOP)—-分頁類

甲爪廣告聯盟發表於2019-02-16

同驗證碼類,分頁也是在個人部落格,論壇等網站中不可缺少的方式,通過分頁可以在一個介面展示固定條數的資料,而不至於將所有資料全部羅列到一起,實現分頁的原理其實就是對資料庫查詢輸出加了一個limit限制,接下來我們就開始準備今天分頁類的邏輯 #### 邏輯準備 > 實現分頁,我們需要獲取準備以下屬性和方法 PHP 屬性{ 資料總條數 每一頁顯示的條數 計算出總頁數 獲取當前是第幾頁 顯示上一頁 顯示下一頁 顯示首頁 顯示尾頁 每一頁的url 資料限制limit } 方法{ 建構函式 計算總頁數 獲取當前頁 獲取上一頁 獲取下一頁 獲取首頁 獲取尾頁 獲取當前頁面url 獲取上一頁url 獲取下一頁url 獲取首頁url 獲取尾頁irl 生成limit記錄 重新生成url地址 顯示分頁連結,顯示分頁情況 } #### 根據上面的邏輯,下一步將文字轉換為程式碼 首先,我們先宣告一個Page類,按照邏輯進行屬性宣告,並且進行初始化 php class Page { //記錄總條數 protected $total; //每頁顯示幾條 protected $nums; //總頁數 protected $totalPages; //當前頁碼 protected $currentPage; //上一頁頁碼 protected $prevPage; //下一頁頁碼 protected $nextPage; //首頁頁碼 protected $firstPage; //尾頁頁碼 protected $endPage; //url protected $url; //limit,傳到資料庫的limit protected $limit; //建構函式,初始化 public function __construct($total, $nums) { $this->total = $total; $this->nums = $nums; $this->totalPages = $this->getTotalPages; $this->currentPage = $this->getCurrentPage; $this->getPrevPage; $this->getNextPage; $this->getFirstPage; $this->getEndPage; $this->getUrl; } } 接下來我們開始完善方法 – 計算總頁數 php protected funciton getTotalPages { return ceil($this->total / $this->$nums); } – 獲取當前頁碼 php protected function getCurentPage { //判斷如果存在page引數並且page大於0,返回實際值,否則返回1 if(isset($_GET[`page`]) && intval($_GET[`page`]) > 0) { $this->currentPage = intval($_GET[`page`]); } else { $this->currentPage = 1; } return $this->currentPage; } – 獲取上一頁 php protected function getPrevPage { $this->prevPage = $this->currentPage - 1; if($this->prevPage prevPage = 1; } return $this->prevPage; } – 獲取下一頁 php protected function getNextPage { $this->nextPage = $this->currentPage + 1; return $this->nextPage; } – 獲取首頁 php protected function getFirstPage { $this->firstPage = 1; return $this->firstPage; } – 獲取尾頁 PHP protected function getEndPage { $this->endPage = $this->totalPages; return $this->endPage; } #### 接下來開始拼接每個頁碼的url – 獲取當前頁的url php protected function getCurrentUrl { return $this->url.`$page=`.$this->currentPage; } – 獲取前一頁的url php protected function getPrevUrl { return $this->url.`&page=`.$this->prevPage; } – 獲取下一頁的url php protected function getNextUrl { return $this->url.`&page=`.$this->nextPage; } – 獲取首頁的url php protected function getFirstUrl { return $this->url.`&page=`.$this->firstPage; } – 獲取尾頁的url php protected function getEndUrl { return $this->url.`&page=`.$this->endPage; } #### 生成limit記錄 PHP public function limit { return ($this->currentPage - 1) * $this->nums.`,`.$this->nums; } #### 生成url地址 php public function getUrl { //獲取當前頁面的檔案位置 $url = $_SERVER[`REQUEST_URI`]; //將url引數解析成陣列 $parse = parse_url($url); //獲得域名地址 $path = $parse[`path`]; //獲取引數 $query = isset($parse[`query`]) ? $parse[`query`] : false; //如果有引數,把page這個引數先給幹掉,因為我們要重新拼接 if($query) { parse_str($query,$query); //幹掉page引數,保留其他引數 unset($query[`page`]); //http_build_query拼將引數拼接成請求 $uri = $parse[`path`].`?`.http_build_query($query); } else { $uri = rtrim($parse[`path`],`?`).`?`; } //智慧識別https和http協議和埠號 $protocal = (isset($_SERVER[`SERVER_PORT`]) && $_SERVER[`SERVER_PORT`] == 443) ? `https://` : `http://`; switch ($_SERVER[`SERVER_PORT`]) { case 80: case 443: $uri = $protocal.$_SERVER[`SERVER_NAME`].$uri; break; default: $uri = $protocal.$_SERVER[`SERVER_NAME`].`:`.$_SERVER[`SERVER_PORT`].$uri; break; } $this->url = $uri; } > 到此所有的邏輯方面都已經處理完啦,接下來的render函式用來顯示分頁的連結 PHP public function render { return array( [`first` => $this->getFirstUrl()], [`prev` => $this->getPrevUrl()], [`current` => $this->getCurrentUrl()], [`next` => $this->getNextUrl()], [`end` => $this->getEndUrl()] ); } ### 哦也,就這麼愉快的結束啦 使用方法如下 PHP //new一個物件 $page = new Page(102,10); //列印出來上頁/下頁/首頁/尾頁……的url var_dump($page->render); #### 後記 — php $url = http://www.jiazhua.com/OOP/Page.class.php?page=1 parse_url($url):將url的檔案路徑和引數分開並儲存到陣列中 .......................................... . array (size=2) .`path` => string `/OOP/Page.class.php` (length=36) .`query` => string `page=1` (length=6) .......................................... ... $query = "page=1&num=2&sex=男" parse_str($query,$query):將帶引數的字串解析成陣列 .......................................... . array . `page` => 1 .`num` => 2 .`sex` => `男` .......................................... ... $query = [`num`=>1,`sex`=>`男`] http_build_query($query):使用給出的關聯(或下標)陣列生成一個經過 URL-encode 的請求字串。 ......................................... . string ."num=1&&sex=`男`" ......................................... ... $_SERVER[`SERVER_PORT`] 獲取埠號 $_SERVER[`SERVER_NAME`] 當前執行指令碼所在的伺服器的主機名。如果指令碼執行於虛擬主機中,該名稱是由那個虛擬主機所設定的值決定
本文由甲爪cpa廣告聯盟整理編輯!

相關文章