PHP面向對象(OOP)----分頁類

PHP面向對象(OOP)----分頁類

同驗證碼類,分頁也是在個人博客,論壇等網站中不可缺少的方式,通過分頁可以在一個界面展示固定條數的數據,而不至于將所有數據全部羅列到一起,實現分頁的原理其實就是對數據庫查詢輸出加了一個limit限制,接下來我們就開始準備今天分頁類的邏輯

邏輯準備

實現分頁,我們需要獲取準備以下屬性和方法

屬性{數據總條數每一頁顯示的條數計算出總頁數獲取當前是第幾頁顯示上一頁顯示下一頁顯示首頁顯示尾頁每一頁的url數據限制limit
}
方法{構造函數計算總頁數獲取當前頁獲取上一頁獲取下一頁獲取首頁獲取尾頁獲取當前頁面url獲取上一頁url獲取下一頁url獲取首頁url獲取尾頁irl生成limit記錄重新生成url地址顯示分頁鏈接,顯示分頁情況
}

根據上面的邏輯,下一步將文字轉換為代碼

首先,我們先聲明一個Page類,按照邏輯進行屬性聲明,并且進行初始化

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(); } } 

接下來我們開始完善方法

  • 計算總頁數
protected funciton getTotalPages(){return ceil($this->total / $this->$nums);}
  • 獲取當前頁碼
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; } 
  • 獲取上一頁
protected function getPrevPage() { $this->prevPage = $this->currentPage - 1; if($this->prevPage < 1) { $this->prevPage = 1; } return $this->prevPage; } 
  • 獲取下一頁
protected function getNextPage() { $this->nextPage = $this->currentPage + 1; return $this->nextPage; } 
  • 獲取首頁
protected function getFirstPage() { $this->firstPage = 1; return $this->firstPage; } 
  • 獲取尾頁
protected function getEndPage() { $this->endPage = $this->totalPages; return $this->endPage; } 

接下來開始拼接每個頁碼的url

  • 獲取當前頁的url
protected function getCurrentUrl() { return $this->url.'$page='.$this->currentPage; } 
  • 獲取前一頁的url
protected function getPrevUrl() { return $this->url.'&page='.$this->prevPage; } 
  • 獲取下一頁的url
protected function getNextUrl() { return $this->url.'&page='.$this->nextPage; } 
  • 獲取首頁的url
protected function getFirstUrl() { return $this->url.'&page='.$this->firstPage; } 
  • 獲取尾頁的url
protected function getEndUrl() { return $this->url.'&page='.$this->endPage; } 

生成limit記錄

public function limit() { return ($this->currentPage - 1) * $this->nums.','.$this->nums; } 

生成url地址

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()函數用來顯示分頁的鏈接

public function render() { return array( ['first' => $this->getFirstUrl()], ['prev' => $this->getPrevUrl()], ['current' => $this->getCurrentUrl()], ['next' => $this->getNextUrl()], ['end' => $this->getEndUrl()] ); } 

哦也,就這么愉快的結束啦

使用方法如下

//new一個對象
$page = new Page(102,10);
//打印出來上頁/下頁/首頁/尾頁……的url var_dump($page->render()); 

后記


$url = http://www.zhyunfe.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'] 當前運行腳本所在的服務器的主機名。如果腳本運行于虛擬主機中,該名稱是由那個虛擬主機所設置的值決定 

轉載于:https://www.cnblogs.com/ghjbk/p/6672135.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284018.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JS 事件練習

QQ拖拽及狀態欄選擇 HTML 1 <!DOCTYPE html>2 <html xmlns"http://www.w3.org/1999/xhtml">3 <head>4 <title>QQ練習</title>5 <link href"css/main.css" rel"stylesheet" />6 <script src&…

Dubbo和Spring Cloud微服務架構對比

微服務架構是互聯網很熱門的話題&#xff0c;是互聯網技術發展的必然結果。它提倡將單一應用程序劃分成一組小的服務&#xff0c;服務之間互相協調、互相配合&#xff0c;為用戶提供最終價值。目錄 微服務主要的優勢 降低復雜度 可獨立部署 容錯 擴展 核心部件 總體架構 Dubbo …

《ABP Framework 極速開發》 - 教程首發

?寫在發布之前強烈建議每一位小伙伴都應該好好看看 ABP Framework 官方文檔&#xff0c;可能有很多的小伙伴跟我剛開始的感覺一樣“一看文檔深似海”&#xff0c;看完文檔之后&#xff0c;想要上手卻找不著頭緒。本套教程寫作的目的之一是為初學者提供一條相對簡潔的快速上手路…

智能家居系統結構標準化

版權申明&#xff1a;本文為博主窗戶(Colin Cai)原創&#xff0c;歡迎轉帖。如要轉貼&#xff0c;必須注明原文網址http://www.cnblogs.com/Colin-Cai/p/8490423.html作者&#xff1a;窗戶QQ&#xff1a;6679072E-mail&#xff1a;6679072qq.com0 引 言 智能家居是指利用先進的…

洛谷 P3391 文藝平衡樹

題目描述 您需要寫一種數據結構&#xff08;可參考題目標題&#xff09;&#xff0c;來維護一個有序數列&#xff0c;其中需要提供以下操作&#xff1a;翻轉一個區間&#xff0c;例如原有序序列是5 4 3 2 1&#xff0c;翻轉區間是[2,4]的話&#xff0c;結果是5 2 3 4 1 --by洛谷…

JSONObject中optString和getString等的區別

2019獨角獸企業重金招聘Python工程師標準>>> 同事在看到我寫的解析數據代碼后&#xff0c;告訴我optString比getString好用&#xff0c;optString不會拋異常&#xff0c;而getString會拋異常&#xff0c;自己是將信將疑&#xff0c;就說&#xff0c;回去后我查查資料…

Lombok插件安裝(IDEA)、配置jar包、使用

點擊進入Lombok官網下載Lombok jar包 使用Lombok可能需要注意的地方 &#xff08;1&#xff09;當你的IDE是Idea時&#xff0c;要注意你的Idea是支持Lombok的&#xff0c;如果不支持請更換高版本嘗試&#xff08;這里采用2018 3.3&#xff09;。 &#xff08;2&#xff09;在使…

Blazor University (40)JavaScript 互操作 —— 傳遞 HTML 元素引用

原文鏈接&#xff1a;https://blazor-university.com/javascript-interop/calling-javascript-from-dotnet/passing-html-element-references/傳遞 HTML 元素引用源代碼[1]在編寫 Blazor 應用程序時&#xff0c;不鼓勵對文檔對象模型 (DOM) 進行操作&#xff0c;因為它可能會干…

RabbitMQ+PHP 教程六(RPC)

(using php-amqplib) 前提必讀 本教程假設RabbitMQ是安裝在標準端口上運行&#xff08;5672&#xff09;。如果您使用不同的主機、端口或憑據&#xff0c;則連接設置需要調整。 如果您在本教程中遇到困難&#xff0c;可以通過郵件列表與我們聯系。 開始 在第二個教程中&#xf…

TKMybatis 介紹和使用

目錄 一、什么是 TKMybatis 二、TKMybatis 使用 2.1 Springboot 項目中加入依賴 2.2 使用講解 2.2.1 實體類中使用 2.2.2 dao中使用 2.2.3 Service 層中使用 2.3 實際案例 2.3.1 dao 層使用 2.3.2 service 層使用 一、什么是 TKMybatis TKMybatis 是基于 Mybatis 框…

angularjs的ng-repeat回調

首先html代碼是這樣的&#xff1a; <label>Name des Leiters:</label><select name"leaderID" id"selectLeaderID"><option ng-repeat"manager in managers" value"leader_id{{manager.id}}&leader_name{{manager…

sed和vim練習

1、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符sed s^[[:space:]]\ /etc/grub2.conf2、刪除/etc/fstab文件中所有以#開頭&#xff0c;后面至少跟一個空白字符的行的行首的#和空白字符sed -n s^#[[:space:]]\p /etc/fstab3、在/root/install.log每一行行首增加#…

WinForm(三)揭開可視化控件的面紗

WinForm所見即所得的UI設計框架&#xff0c;開發效率確實有所提升&#xff0c;同時降低了編程門檻&#xff0c;讓WinForm更普及。拖拖拽拽就能設計出一個界面&#xff0c;那么我們拖拽的這些東西是什么&#xff1f;它們是什么原理&#xff1f;。WinForm我覺得很好的一點是&…

淺談 maxMemory , totalMemory , freeMemory 和 OOM 與 native Heap

作者&#xff1a;林冠宏 / 指尖下的幽靈 掘金&#xff1a;https://juejin.im/user/587f0dfe128fe100570ce2d8 博客&#xff1a;http://www.cnblogs.com/linguanh/ GitHub &#xff1a; https://github.com/af913337456/ 騰訊云專欄&#xff1a; https://cloud.tencent.com/deve…

RestTemplate 詳解

在項目中&#xff0c;當我們需要遠程調用一個 HTTP 接口時&#xff0c;我們經常會用到 RestTemplate 這個類。這個類是 Spring 框架提供的一個工具類。Spring 官網對它的介紹如下&#xff1a; RestTemplate: The original Spring REST client with a synchronous, template met…

初識Spark2.0之Spark SQL

內存計算平臺Spark在今年6月份的時候正式發布了spark2.0&#xff0c;相比上一版本的spark1.6版本&#xff0c;在內存優化&#xff0c;數據組織&#xff0c;流計算等方面都做出了較大的改變&#xff0c;同時更加注重基于DataFrame數據組織的MLlib&#xff0c;更加注重機器學習整…

webpack開發Vue配置

一直以來使用webpack都是用的別人的配置&#xff0c;這幾天自己學習了一下。 項目地址&#xff1a;https://github.com/donghaohao... 新建整個工程 npm init安裝依賴&#xff0c;這里我們開發vue項目&#xff0c;npm install vue --save&#xff0c;然后是開發時的依賴npm ins…

ABP詳細教程——模塊類

概述模塊化是ABP vNext的最大亮點&#xff0c;也是ABP vNext框架的核心&#xff0c;而模塊類是ABP vNext框架模塊化的核心要素。這一章節&#xff0c;我就從模塊類的用法、運行機制、源代碼等層面&#xff0c;帶大家詳細了解ABP vNext的模塊類。用法在ABP的約定中&#xff0c;每…

[轉]Eureka工作原理

目錄 Eureka 工作原理 Eureka 核心概念 自我保護機制 Eureka 集群原理 Eurka 工作流程 總結 Eureka 工作原理 上節內容為大家介紹了&#xff0c;注冊中心 Eureka 產品的使用&#xff0c;以及如何利用 Eureka 搭建單臺和集群的注冊中心。這節課我們來繼續學習 Eureka&…

centos7下別名(alias)的特殊用法

版權聲明&#xff1a;轉載請注明出處:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79438200 參考&#xff1a;https://www.cyberciti.biz/faq/bash-bypass-alias-command-on-linux-macos-unix/ 正常情況下&#xff0c;定義過的別名&a…