激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - PHP教程 - 仿Aspnetpager的一個PHP分頁類代碼 附源碼下載

仿Aspnetpager的一個PHP分頁類代碼 附源碼下載

2020-01-13 16:08PHP教程網(wǎng) PHP教程

最近正在學習php,想拿一些demo來練習一下,想起前段時間自己用.net寫的仿Aspnetpager控件的分頁類,就琢磨著用PHP來實現(xiàn)仿aspnetpager的分頁功能,隨便復(fù)習下

基本邏輯思路和.net的一樣,就是將通過實體類來進行配置換成了通過數(shù)組進行配置,邏輯比較簡單,根據(jù)條件判斷拼接分頁html。 

有以下幾個簡單的功能: 

1:支持相關(guān)按鈕的顯示與否配置 
2:支持每頁數(shù)目,文本名稱,html標簽類名稱的自由配置 
3:支持url重寫過的頁面(需自己在配置數(shù)組中添加重寫規(guī)則) 

簡單吧,還是直接上代碼: 

核心代碼:pager.class.php 

復(fù)制代碼代碼如下:


<?php 
class pager{ 
//分頁的參數(shù)配置 
private $config=array( 
//首頁按鈕的文本文字 
"first_btn_text"=>"首頁", 
//上一頁按鈕的文本文字, 
"pre_btn_text"=>"上一頁", 
//下一頁的文本文字 
"next_btn_text"=>"下一頁", 
//最后一頁的文本文字, 
"last_btn_text"=>"末頁", 
//總記錄數(shù) *必需 
"record_count"=>0, 
//每頁分頁尺寸 
"pager_size"=>10, 
//當前頁碼 *必需 
"pager_index"=>1, 
//每頁顯示的最大數(shù)量按鈕 
"max_show_page_size"=>10, 
//頁碼在瀏覽器中傳值的名稱 默認為page 
"querystring_name"=>"page", 
//URL是否重寫 默認為flase 
"enable_urlrewriting"=>false, 
//url重寫規(guī)則 例如page/{page} 其中{page}就是代表頁數(shù) 
"urlrewrite_pattern"=>"", 
//分頁容器的css名稱 
"classname"=>"paginator", 
//當前頁按鈕的class名稱 
"current_btn_class"=>"cpb", 
//分頁文字描述span標簽的css 
"span_text_class"=>"stc", 
/*跳轉(zhuǎn)的詳細文本 
*totle代表總頁數(shù), 
*size代表每頁數(shù)目 
* goto代表要跳轉(zhuǎn)的輸入框 
* record代表總記錄數(shù) 
* index代表當前的頁碼 
*/ 
"jump_info_text"=>"共{totle}頁,每頁{size}條記錄,跳轉(zhuǎn)到{goto}頁", 
//跳轉(zhuǎn)按鈕的文本 
"jump_btn_text"=>"確定", 
//是否顯示跳轉(zhuǎn) 
"show_jump"=>false, 
//是否展示前面的按鈕 首頁&上一頁 
"show_front_btn"=>true, 
//是否展示后面的按鈕 下一頁&末頁 
"show_last_btn"=>true 
); 
/* 
* 類的構(gòu)造函數(shù) 
* $config:該分頁類的配置 
*/ 
public function __construct($config) 

$this->init_config($config); 

function __destruct() 

unset($this->config); 

/* 
* 構(gòu)造分頁主函數(shù) 
*/ 
public function builder_pager() 

//分頁的字符串 
$pager_arr=array(); 
//每頁的尺寸 
$pager_size=$this->config["pager_size"]; 
//得到一共的分頁數(shù)目 
$pager_num=$this->config["record_count"]%$pager_size==0?$this->config["record_count"]/$pager_size:floor($this->config["record_count"]/$pager_size)+1; 
//當前的頁碼序號 如果是0,則置為1 
$pager_index=round($this->config["pager_index"])==0?1:round($this->config["pager_index"]); 
//如果當前的頁碼大于等于最后一頁,則當前的頁碼置為最后一頁 
$pager_index=$pager_index>=$pager_num?$pager_num:$pager_index; 
//下一頁的頁碼 
$pager_next=$pager_index>=$pager_num?$pager_num:($pager_index+1); 
//獲取需要跳轉(zhuǎn) 的url 
$url=$this->get_url(); 
//添加開頭的div 
$classname=$this->config["classname"]; 
$pager_arr[]="<div class=\"$classname\">\n"; 
//添加前面兩個按鈕的html 
if($this->config["show_front_btn"]) 

//如果當前的頁碼為1 則front這兩個按鈕則會被禁用 
$attr=$pager_index==1?"disabled=disabled":""; 
$pager_arr[]=$this->get_a_html(self::format_url($url,1),$this->config["first_btn_text"],$attr); 
$pager_arr[]=$this->get_a_html(self::format_url($url,$pager_index-1),$this->config["pre_btn_text"],$attr); 

//當前顯示頁碼的起始 1~10 1 11~20 11 
$current_pager_start=$pager_index%$pager_size==0?($pager_index/$pager_size-1)*$pager_size+1:floor($pager_index/$pager_size)*$pager_size+1; 
//當前顯示頁碼的結(jié)束 
$current_pager_end=($current_pager_start+$pager_size-1)>=$pager_num?$pager_num:($current_pager_start+$pager_size-1); 
//添加跳轉(zhuǎn)到上一層的html 
if($pager_index>$pager_size) 

$pager_arr[]=$this->get_a_html(self::format_url($url,$current_pager_start-1),"..."); 

//主體頁碼部分 
for($i=$current_pager_start;$i<=$current_pager_end;$i++) 

if($i!=$pager_index) 

$pager_arr[]=$this->get_a_html(self::format_url($url,$i),$i); 
}else{ 
//如果這個是當前頁 
$pager_arr[]=$this->get_span_html($i,$this->config["current_btn_class"]); 


//添加下一層的html 
if($pager_index<=($pager_num-$pager_num%$pager_size)) 

$pager_arr[]=$this->get_a_html(self::format_url($url,$current_pager_end+1),"..."); 

//添加后面兩個按鈕的html 
if($this->config["show_last_btn"]) 

//如果當前的頁碼為最后一頁 則last這兩個按鈕則會被禁用 
$attr=$pager_index>=$pager_num?"disabled=disabled":""; 
$pager_arr[]=$this->get_a_html(self::format_url($url,$pager_next),$this->config["next_btn_text"],$attr); 
$pager_arr[]=$this->get_a_html(self::format_url($url,$pager_num),$this->config["last_btn_text"],$attr); 

//添加跳轉(zhuǎn)的html 
if($this->config["show_jump"]) 

$patterns=array("/\{totle\}/","/\{size\}/","/\{goto\}/","/\{record\}/","/\{index\}/",); 
$replacements=array( 
$pager_num, 
$pager_size, 
"<input type=\"input\" id=\"jumpNum\" style=\"width:20px;\" name=\"jump\" value=\"".$pager_next."\" />\n", 
$this->config["record_count"], 
$this->config["pager_index"] 
); 
//替換特定的標簽組成跳轉(zhuǎn) 
$pager_arr[]=preg_replace($patterns,$replacements,$this->config["jump_info_text"]); 
$btn_text=$this->config['jump_btn_text']; 
$pager_arr[]="<a href=\"javascript:void(0);\" style=\"float:none;\" onclick=\"javascript:jump();\">".$this->config['jump_btn_text']."</a></span>\n"; 
$pager_arr[]=$this->get_jumpscript($url); 

$pager_arr[]="</div>"; 
$this->config["pager_index"]=$pager_index; 
return implode($pager_arr); 

/* 
*獲取需要處理的url,支持重寫配置,各種參數(shù)的url 
*/ 
private function get_url() 

//如果設(shè)置了允許url重寫 
if($this->config["enable_urlrewriting"]) 

//得到調(diào)用文件所在的url 
$file_path="http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]; 
//得到調(diào)用url所在的網(wǎng)絡(luò)目錄 
$file_path=substr($file_path,0,strripos($file_path,"/"))."/"; 
//直接將目錄附加重寫規(guī)則 形成新的url 
$url=$file_path.$this->config["urlrewrite_pattern"]; 
}else{ 
//得到當前調(diào)用頁面的絕對url 
$url="http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; 
//分頁參數(shù)在瀏覽器中傳遞的名稱 
$querystring_name=$this->config['querystring_name']; 
//如果該url中包含php?的字符串 則需要將分頁參數(shù)替換 
if(strpos($url,"php?")) 

//如果存在page=xxx的字樣 
$pattern="/$querystring_name=[0-9]*/"; 
if(preg_match($pattern,$url)) 

//將含page=***的字樣中的數(shù)字替換成{0} 
$url=preg_replace($pattern,"$querystring_name={page}",$url); 
}else{ 
$url.="&$querystring_name={page}"; 

}else{ 
//直接附加參數(shù)形成分頁的完整url 
$url.="?$querystring_name={page}"; 


return $url; 

/* 
* 得到a標簽的html 
*$url:a標簽所要導向的html 
*$title:a標簽的標題 
**$attr:a標簽上的附加屬性 可以不寫 
*/ 
private static function get_a_html($url,$title,$attr="") 

return "<a href='$url' $attr style=\"margin-right:5px;\">$title</a>\n"; 

/* 
* 獲得span標簽的html 
* $num:span中的文本,即頁序號 
* $classname:span標簽的class名稱 
*/ 
private static function get_span_html($num,$classname) 

return "<span class=\"" .$classname. "\">$num</span>\n"; 

/* 
* 格式化url 
* $url 原url 
* $page 頁碼 
*/ 
private static function format_url($url,$page) 

return preg_replace("/\{page\}$/",$page,$url); 

/* 
*初始化分頁的配置文件 
*如果在參數(shù)中不含該鍵值,則默認使用申明的值 
*/ 
private function init_config($config) 

//判斷該值是否存在、是否是數(shù)組、是否含有記錄 
if(isset($config)&&is_array($config)&&count($config)>0){ 
foreach($config as $key=>$val) 

$this->config[$key]=$val; 



/* 
* 構(gòu)造跳轉(zhuǎn)功能腳本的方法 
*$url:需要跳轉(zhuǎn)的額那個url 
*/ 
private function get_jumpscript($url) 

$scriptstr = "<script type=\"text/javascript\">\n". 
"function jump(){\n". 
"var jnum=document.getElementById(\"jumpNum\").value;\n". 
"if(isNaN(jnum)){\n". 
"alert(\"在跳轉(zhuǎn)框中請輸入數(shù)字!\");\n". 
"}\n". 
"else{\n". 
"var re=/\{page\}/\n". 
"location.href='$url'.replace(re,jnum);\n". 
"}\n". 
"}\n". 
"</script>\n"; 
return $scriptstr; 

/* 
* php中構(gòu)造類似.net中format方法的函數(shù) 
* 用法:format("hello,{0},{1},{2}", 'x0','x1','x2') 
*/ 
private function format() { 
$args = func_get_args(); 
if (count($args) == 0) { return;} 
if (count($args) == 1) { return $args[0]; } 
$str = array_shift($args); 
$str = preg_replace_callback('/\\{(0|[1-9]\\d*)\\}/', create_function('$match', '$args = '.var_export($args, true).'; return isset($args[$match[1]]) ? $args[$match[1]] : $match[0];'), $str); 
return $str; 


?> 


直接用數(shù)組參數(shù)的方式調(diào)用 

復(fù)制代碼代碼如下:


<?php 
$config1=array( 
"record_count"=>703, 
"pager_size"=>10, 
"show_jump"=>true, 
"pager_index"=>$_GET["page"] 
); 
$pager_simple=new pager($config1); 
echo $pager_simple->builder_pager(); 
?> 


最后來看下demo的圖片: 
仿Aspnetpager的一個PHP分頁類代碼 附源碼下載
由于小弟最近剛剛學習php,代碼中出現(xiàn)的不規(guī)范,低效率,冗余或者設(shè)計問題還請大家多多指教。 

demo源碼下載

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久久久久久久久久久久久久 | 美女露100%无遮挡 | 久久99亚洲精品久久99果 | 韩国十九禁高潮床戏在线观看 | 97黄色网 | 奇米影视在线 | 国产精品免费一区二区三区都可以 | 一级毛片视频播放 | 日韩视频在线一区二区三区 | 久久精品a一级国产免视看成人 | av影院在线播放 | 亚洲自拍第一 | 美女网站黄在线观看 | 免费在线观看成人av | 色婷婷久久久亚洲一区二区三区 | 91精品国产777在线观看 | 亚洲电影在线观看高清免费 | 成人毛片一区二区三区 | 青草视频在线观看视频 | 国产一区日韩一区 | 欧美大胆xxxx肉体摄影 | 91久久久久久 | 激情久久一区二区 | av电影在线播放 | 黄色免费播放网站 | 日本免费a∨ | 网站毛片 | 深夜免费福利视频 | 97久色 | 九九色网站| 日韩一级片一区二区三区 | 免费a级毛片大学生免费观看 | av大全在线播放 | 99精品国产成人一区二区 | 亚洲成人在线视频网 | 国产18视频 | 曰韩在线视频 | 久久96国产精品久久秘臀 | 精品一区二区免费 | wankz100%videos| 玖草在线资源 |