PHP實(shí)現(xiàn)可自定義樣式的分頁(yè)類
本文實(shí)例為大家分享了PHP實(shí)現(xiàn)可自定義樣式的分頁(yè)類,供大家參考,具體內(nèi)容如下
<?php //namespace Component; /** * 2016-3-27 * @author ankang */ class Page { private $ShowPage; private $CountPage; private $Floorp; private $PageUrl; private $PageClass; private $CurClass; /** * @author ankang * @param number $CountNum 數(shù)據(jù)總數(shù) * @param string $PageUrl 跳轉(zhuǎn)鏈接 * @param string $PageClass <a>標(biāo)簽 總體樣式 * @param string $PageUrl 當(dāng)前頁(yè)樣式 * @param number $PageSize 每頁(yè)顯示的數(shù)據(jù)條數(shù) * @param number $ShowPage 每次顯示的頁(yè)數(shù) */ public function __construct($CountNum, $PageUrl = NULL, $PageClass = NULL,$CurClass = NULL, $PageSize = 20, $ShowPage = 5) { $this->ShowPage = $ShowPage; $this->CountPage = ceil ( $CountNum / $PageSize ); $this->Floorp = floor ( $ShowPage / 2 ); // 偏移量 $this->PageClass = is_null ( $PageClass ) ? '' : $PageClass; $this->CurClass = is_null ( $CurClass ) ? '' : $CurClass; // $ServerURL = ( preg_match('/\?/i', $_SERVER['REQUEST_URI']))?preg_replace('/\&p\=[0-9]+/i', "", $_SERVER['REQUEST_URI']) : $_SERVER['REQUEST_URI']."?"; // if( substr($ButURL,0,2)=='//' ){ // $ServerURL = substr($ServerURL,1); // } // $url = preg_replace('/p=[\d]*/i', '', $ServerURL); $url = ''; //推薦自己傳url,不傳也可以打開上面的代碼自動(dòng)獲取 $this->PageUrl = is_null ( $PageUrl ) ? $url : $PageUrl; } /** * * @param number $Page * @param string $ShowToPage * 首頁(yè),上下頁(yè),尾頁(yè) * @param string $Html 標(biāo)簽元素,li,p * @return string */ public function getPage($Page = 1, $ShowToPage = true, $Html = null) { $StartPage = ($Page - $this->Floorp); // 開始頁(yè)碼 $EndPage = ($Page + $this->Floorp); // 結(jié)束頁(yè)碼 if ($this->CountPage < $this->ShowPage) { $StartPage = 1; $EndPage = $this->CountPage; } if ($StartPage < 1) { $StartPage = 1; $EndPage = $this->ShowPage; } if ($EndPage > $this->CountPage) { $StartPage = $this->CountPage - $this->ShowPage + 1; $EndPage = $this->CountPage; } $PageHtml = ''; if (! is_null ( $Html )) { if ($Html == 'li') { $Shtml = '<li>'; $Ehtml = '</li>'; } else { $Shtml = '<p>'; $Ehtml = '</p>'; } } if (true == $ShowToPage) { $PageHtml .= "$Shtml<a href='{$this->PageUrl}p=1'>« 首頁(yè)</a>$Ehtml"; $PrveUrl = $this->getPrve($Page); $PageHtml .= "$Shtml<a href='{$PrveUrl}'>« 上一頁(yè)</a>$Ehtml"; } for($i = $StartPage; $i <= $EndPage; $i ++) { if ($Page == $i) { $PageHtml .= "$Shtml<a href='{$this->PageUrl}p={$i}' class='{$this->CurClass}'>{$i}</a>$Ehtml"; } else { $PageHtml .= "$Shtml<a href='{$this->PageUrl}p={$i}' class='{$this->PageClass}'>{$i}</a>$Ehtml"; } } if (true == $ShowToPage) { $NextUrl = $this->getNext($Page); $PageHtml .= "$Shtml<a href='{$NextUrl}'>下一頁(yè) »</a>$Ehtml"; $PageHtml .= "$Shtml<a href='{$this->PageUrl}p={$this->CountPage}' >尾頁(yè) »</a>$Ehtml"; } return $PageHtml; } public function getPrve($Page){ if ($Page != 1) { $Prve = $Page - 1; $PrveUrl = "{$this->PageUrl}p={$Prve}"; } else { $PrveUrl = "{$this->PageUrl}p=1"; } return $PrveUrl; } public function getNext($Page){ if ($Page != $this->CountPage) { $Next = $Page + 1; $NextUrl = "{$this->PageUrl}p={$Next}"; } else { $NextUrl = "{$this->PageUrl}p={$this->CountPage}"; } return $NextUrl; } }
再為大家分享一個(gè)主要用于新手學(xué)習(xí)php分頁(yè),代碼簡(jiǎn)單實(shí)用,主要是注釋很完整。
1. Page.class.php
<?php /** * 分頁(yè)類 * * 調(diào)用方式: * $p=new Page(總頁(yè)數(shù),顯示頁(yè)數(shù),當(dāng)前頁(yè)碼,每頁(yè)顯示條數(shù),[鏈接]); * print_r($p->getPages()); //生成一個(gè)頁(yè)碼數(shù)組(鍵為頁(yè)碼,值為鏈接) * echo $p->showPages(1); //生成一個(gè)頁(yè)碼樣式(可添加自定義樣式) * * @author: Dzer <Email:358654744@qq.com Blog:Dzer.me> * @version: 2014-12-25 09:09:42 * @Last Modified time: 2014-12-28 17:37:13 */ /* 思路: 給我一個(gè) 總頁(yè)數(shù),需要顯示的頁(yè)數(shù),當(dāng)前頁(yè),每頁(yè)顯示的條數(shù),連接 寫一個(gè)方法 生成一個(gè)一維數(shù)組,鍵為頁(yè)碼 值為連接 寫一個(gè)方法 返回一個(gè)生成好樣式的頁(yè)碼(并且可以根據(jù)自己需要添加樣式) 默認(rèn)樣式 共45條記錄,每頁(yè)顯示10條,當(dāng)前第1/4頁(yè) [首頁(yè)] [上頁(yè)] [1] [2] [3] .. [下頁(yè)] [尾頁(yè)] */ class Page{ protected $count; //總條數(shù) protected $showPages; //需要顯示的頁(yè)數(shù) protected $countPages; //總頁(yè)數(shù) protected $currPage; //當(dāng)前頁(yè) protected $subPages; //每頁(yè)顯示條數(shù) protected $href; //連接 protected $page_arr=array(); //保存生成的頁(yè)碼 鍵頁(yè)碼 值為連接 /** * __construct 構(gòu)造函數(shù)(獲取分頁(yè)所需參數(shù)) * @param int $count 總條數(shù) * @param int $showPages 顯示頁(yè)數(shù) * @param int $currPage 當(dāng)前頁(yè)數(shù) * @param int $subPages 每頁(yè)顯示數(shù)量 * @param string $href 連接(不設(shè)置則獲取當(dāng)前URL) */ public function __construct($count,$showPages,$currPage,$subPages,$href=''){ $this->count=$count; $this->showPages=$showPages; $this->currPage=$currPage; $this->subPages=$subPages; //如果鏈接沒(méi)有設(shè)置則獲取當(dāng)前連接 if(empty($href)){ $this->href=htmlentities($_SERVER['PHP_SELF']); }else{ $this->href=$href; } $this->construct_Pages(); } /** * getPages 返回頁(yè)碼數(shù)組 * @return array 一維數(shù)組 鍵為頁(yè)碼 值為鏈接 */ public function getPages(){ return $this->page_arr; } /** * showPages 返回生成好的頁(yè)碼 * @param int $style 樣式 * @return string 生成好的頁(yè)碼 */ public function showPages($style=1){ $func='pageStyle'.$style; return $this->$func(); } /** * pageStyle1 分頁(yè)樣式(可參照這個(gè)添加自定義樣式 例如pageStyle2()) * 樣式 共45條記錄,每頁(yè)顯示10條,當(dāng)前第1/4頁(yè) [首頁(yè)] [上頁(yè)] [1] [2] [3] .. [下頁(yè)] [尾頁(yè)] * @return string */ protected function pageStyle1(){ /* 構(gòu)造普通模式的分頁(yè) 共4523條記錄,每頁(yè)顯示10條,當(dāng)前第1/453頁(yè) [首頁(yè)] [上頁(yè)] [1] [2] [3] .. [下頁(yè)] [尾頁(yè)] */ $pageStr='共'.$this->count.'條記錄,每頁(yè)顯示'.$this->subPages.'條'; $pageStr.='當(dāng)前第'.$this->currPage.'/'.$this->countPages.'頁(yè) '; $_GET['page'] = 1; $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">首頁(yè)</a>] </span>'; //如果當(dāng)前頁(yè)不是第一頁(yè)就顯示上頁(yè) if($this->currPage>1){ $_GET['page'] = $this->currPage-1; $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">上頁(yè)</a>] </span>'; } foreach ($this->page_arr as $k => $v) { $_GET['page'] = $k; $pageStr.='<span>[<a href="'.$v.'">'.$k.'</a>] </span>'; } //如果當(dāng)前頁(yè)小于總頁(yè)數(shù)就顯示下一頁(yè) if($this->currPage<$this->countPages){ $_GET['page'] = $this->currPage+1; $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">下頁(yè)</a>] </span>'; } $_GET['page'] = $this->countPages; $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">尾頁(yè)</a>] </span>'; return $pageStr; } /** * construct_Pages 生成頁(yè)碼數(shù)組 * 鍵為頁(yè)碼,值為鏈接 * $this->page_arr=Array( * [1] => index.php?page=1 * [2] => index.php?page=2 * [3] => index.php?page=3 * ......) */ protected function construct_Pages(){ //計(jì)算總頁(yè)數(shù) $this->countPages=ceil($this->count/$this->subPages); //根據(jù)當(dāng)前頁(yè)計(jì)算前后頁(yè)數(shù) $leftPage_num=floor($this->showPages/2); $rightPage_num=$this->showPages-$leftPage_num; //左邊顯示數(shù)為當(dāng)前頁(yè)減左邊該顯示的數(shù) 例如總顯示7頁(yè) 當(dāng)前頁(yè)是5 左邊最小為5-3 右邊為5+3 $left=$this->currPage-$leftPage_num; $left=max($left,1); //左邊最小不能小于1 $right=$left+$this->showPages-1; //左邊加顯示頁(yè)數(shù)減1就是右邊顯示數(shù) $right=min($right,$this->countPages); //右邊最大不能大于總頁(yè)數(shù) $left=max($right-$this->showPages+1,1); //確定右邊再計(jì)算左邊,必須二次計(jì)算 for ($i=$left; $i <= $right; $i++) { $_GET['page'] = $i; $this->page_arr[$i]=$this->href.'?'.http_build_query($_GET); } } }
2. demo.php
<?php /** * 分頁(yè)類demo * Be the best of whatever you are! * * @author: Dzer<358654744@qq.com> * @version: 2014-12-28 17:38:23 * @Last Modified time: 2014-12-28 18:08:28 */ header("content-type:text/html;charset=utf8"); include('./Page.class.php'); //引入類 //$p=new Page(總頁(yè)數(shù),顯示頁(yè)數(shù),當(dāng)前頁(yè)碼,每頁(yè)顯示條數(shù),[鏈接]); //連接不設(shè)置則為當(dāng)前鏈接 $page=isset($_GET['page']) ? $_GET['page'] : 1; $p=new Page(100,7,$page,8); //生成一個(gè)頁(yè)碼數(shù)組(鍵為頁(yè)碼,值為鏈接) echo "<pre>"; print_r($p->getPages()); //生成一個(gè)頁(yè)碼樣式(可添加自定義樣式) //樣式 共45條記錄,每頁(yè)顯示10條,當(dāng)前第1/4頁(yè) [首頁(yè)] [上頁(yè)] [1] [2] [3] .. [下頁(yè)] [尾頁(yè)] echo $p->showPages(1);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)PHP程序設(shè)計(jì)有所幫助。
- 功能強(qiáng)大的php分頁(yè)函數(shù)
- PHP實(shí)現(xiàn)適用于文件內(nèi)容操作的分頁(yè)類
- 基于PHP實(shí)現(xiàn)數(shù)據(jù)分頁(yè)顯示功能
- PHP框架Laravel插件Pagination實(shí)現(xiàn)自定義分頁(yè)
- 簡(jiǎn)單好用的PHP分頁(yè)類
- PHP MSSQL 分頁(yè)實(shí)例
- 兩款萬(wàn)能的php分頁(yè)類
- php實(shí)現(xiàn)分頁(yè)功能的3種方法
- jQuery+Ajax+PHP+Mysql實(shí)現(xiàn)分頁(yè)顯示數(shù)據(jù)實(shí)例講解
- Thinkphp3.2.3分頁(yè)使用實(shí)例解析
相關(guān)文章
提示Trying to clone an uncloneable object of class Imagic的解決
使用網(wǎng)上流傳的一個(gè)程序?qū)崿F(xiàn)pdf截圖為png,需要使用Imagic擴(kuò)展,安裝后出現(xiàn)Trying to clone an uncloneable object of class Imagic提示,下面是具體的解決方法分享。2011-10-10phpmyadmin安裝時(shí)提示:Warning: require_once(./libraries/common.inc
common.inc.php這個(gè)文件是存在的,而且系統(tǒng)中php也不裝在C盤根目錄下,怎么會(huì)有這樣的提示呢?經(jīng)過(guò)一陣調(diào)試終于發(fā)現(xiàn)解決方法2011-08-08thinkphp Tp6經(jīng)常報(bào)錯(cuò) Call to undefined
在使用Tp6框架時(shí)經(jīng)常遇到"Call to undefined method"的錯(cuò)誤,這里就為大家分享一下具體的使用方法,需要的朋友可以參考下2023-08-08ThinkPHP基于think-queue的隊(duì)列插件實(shí)現(xiàn)消息推送
think-queue是ThinkPHP官方提供的一個(gè)消息隊(duì)列服務(wù),是專門支持隊(duì)列服務(wù)的擴(kuò)展包。think-queue消息隊(duì)列適用于大并發(fā)或返回結(jié)果時(shí)間比較長(zhǎng)且需要批量操作的第三方接口,可用于短信發(fā)送、郵件發(fā)送、APP推送。2022-12-12探討php define()函數(shù)及defined()函數(shù)使用詳解
本篇文章是對(duì)php中define()函數(shù)及defined()函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06