本文實(shí)例為大家分享了PHP實(shí)現(xiàn)可自定義樣式的分頁類,供大家參考,具體內(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)前頁樣式
* @param number $PageSize 每頁顯示的數(shù)據(jù)條數(shù)
* @param number $ShowPage 每次顯示的頁數(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
* 首頁,上下頁,尾頁
* @param string $Html 標(biāo)簽元素,li,p
* @return string
*/
public function getPage($Page = 1, $ShowToPage = true, $Html = null) {
$StartPage = ($Page - $this->Floorp); // 開始頁碼
$EndPage = ($Page + $this->Floorp); // 結(jié)束頁碼
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'>« 首頁</a>$Ehtml";
$PrveUrl = $this->getPrve($Page);
$PageHtml .= "$Shtml<a href='{$PrveUrl}'>« 上一頁</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}'>下一頁 »</a>$Ehtml";
$PageHtml .= "$Shtml<a href='{$this->PageUrl}p={$this->CountPage}' >尾頁 »</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分頁,代碼簡單實(shí)用,主要是注釋很完整。
1. Page.class.php
<?php
/**
* 分頁類
*
* 調(diào)用方式:
* $p=new Page(總頁數(shù),顯示頁數(shù),當(dāng)前頁碼,每頁顯示條數(shù),[鏈接]);
* print_r($p->getPages()); //生成一個(gè)頁碼數(shù)組(鍵為頁碼,值為鏈接)
* echo $p->showPages(1); //生成一個(gè)頁碼樣式(可添加自定義樣式)
*
* @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è) 總頁數(shù),需要顯示的頁數(shù),當(dāng)前頁,每頁顯示的條數(shù),連接
寫一個(gè)方法 生成一個(gè)一維數(shù)組,鍵為頁碼 值為連接
寫一個(gè)方法 返回一個(gè)生成好樣式的頁碼(并且可以根據(jù)自己需要添加樣式)
默認(rèn)樣式 共45條記錄,每頁顯示10條,當(dāng)前第1/4頁 [首頁] [上頁] [1] [2] [3] .. [下頁] [尾頁]
*/
class Page{
protected $count; //總條數(shù)
protected $showPages; //需要顯示的頁數(shù)
protected $countPages; //總頁數(shù)
protected $currPage; //當(dāng)前頁
protected $subPages; //每頁顯示條數(shù)
protected $href; //連接
protected $page_arr=array(); //保存生成的頁碼 鍵頁碼 值為連接
/**
* __construct 構(gòu)造函數(shù)(獲取分頁所需參數(shù))
* @param int $count 總條數(shù)
* @param int $showPages 顯示頁數(shù)
* @param int $currPage 當(dāng)前頁數(shù)
* @param int $subPages 每頁顯示數(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;
//如果鏈接沒有設(shè)置則獲取當(dāng)前連接
if(empty($href)){
$this->href=htmlentities($_SERVER['PHP_SELF']);
}else{
$this->href=$href;
}
$this->construct_Pages();
}
/**
* getPages 返回頁碼數(shù)組
* @return array 一維數(shù)組 鍵為頁碼 值為鏈接
*/
public function getPages(){
return $this->page_arr;
}
/**
* showPages 返回生成好的頁碼
* @param int $style 樣式
* @return string 生成好的頁碼
*/
public function showPages($style=1){
$func='pageStyle'.$style;
return $this->$func();
}
/**
* pageStyle1 分頁樣式(可參照這個(gè)添加自定義樣式 例如pageStyle2())
* 樣式 共45條記錄,每頁顯示10條,當(dāng)前第1/4頁 [首頁] [上頁] [1] [2] [3] .. [下頁] [尾頁]
* @return string
*/
protected function pageStyle1(){
/* 構(gòu)造普通模式的分頁
共4523條記錄,每頁顯示10條,當(dāng)前第1/453頁 [首頁] [上頁] [1] [2] [3] .. [下頁] [尾頁]
*/
$pageStr='共'.$this->count.'條記錄,每頁顯示'.$this->subPages.'條';
$pageStr.='當(dāng)前第'.$this->currPage.'/'.$this->countPages.'頁 ';
$_GET['page'] = 1;
$pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">首頁</a>] </span>';
//如果當(dāng)前頁不是第一頁就顯示上頁
if($this->currPage>1){
$_GET['page'] = $this->currPage-1;
$pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">上頁</a>] </span>';
}
foreach ($this->page_arr as $k => $v) {
$_GET['page'] = $k;
$pageStr.='<span>[<a href="'.$v.'">'.$k.'</a>] </span>';
}
//如果當(dāng)前頁小于總頁數(shù)就顯示下一頁
if($this->currPage<$this->countPages){
$_GET['page'] = $this->currPage+1;
$pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">下頁</a>] </span>';
}
$_GET['page'] = $this->countPages;
$pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">尾頁</a>] </span>';
return $pageStr;
}
/**
* construct_Pages 生成頁碼數(shù)組
* 鍵為頁碼,值為鏈接
* $this->page_arr=Array(
* [1] => index.php?page=1
* [2] => index.php?page=2
* [3] => index.php?page=3
* ......)
*/
protected function construct_Pages(){
//計(jì)算總頁數(shù)
$this->countPages=ceil($this->count/$this->subPages);
//根據(jù)當(dāng)前頁計(jì)算前后頁數(shù)
$leftPage_num=floor($this->showPages/2);
$rightPage_num=$this->showPages-$leftPage_num;
//左邊顯示數(shù)為當(dāng)前頁減左邊該顯示的數(shù) 例如總顯示7頁 當(dāng)前頁是5 左邊最小為5-3 右邊為5+3
$left=$this->currPage-$leftPage_num;
$left=max($left,1); //左邊最小不能小于1
$right=$left+$this->showPages-1; //左邊加顯示頁數(shù)減1就是右邊顯示數(shù)
$right=min($right,$this->countPages); //右邊最大不能大于總頁數(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
/**
* 分頁類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(總頁數(shù),顯示頁數(shù),當(dāng)前頁碼,每頁顯示條數(shù),[鏈接]);
//連接不設(shè)置則為當(dāng)前鏈接
$page=isset($_GET['page']) ? $_GET['page'] : 1;
$p=new Page(100,7,$page,8);
//生成一個(gè)頁碼數(shù)組(鍵為頁碼,值為鏈接)
echo "<pre>";
print_r($p->getPages());
//生成一個(gè)頁碼樣式(可添加自定義樣式)
//樣式 共45條記錄,每頁顯示10條,當(dāng)前第1/4頁 [首頁] [上頁] [1] [2] [3] .. [下頁] [尾頁]
echo $p->showPages(1);
以上就是本文的全部內(nèi)容,希望對(duì)大家學(xué)習(xí)PHP程序設(shè)計(jì)有所幫助。