一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

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

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

2020-01-13 16:08PHP教程網 PHP教程

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

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

有以下幾個簡單的功能: 

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

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

核心代碼:pager.class.php 

復制代碼代碼如下:


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

$this->init_config($config); 

function __destruct() 

unset($this->config); 

/* 
* 構造分頁主函數 
*/ 
public function builder_pager() 

//分頁的字符串 
$pager_arr=array(); 
//每頁的尺寸 
$pager_size=$this->config["pager_size"]; 
//得到一共的分頁數目 
$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); 
//獲取需要跳轉 的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; 
//當前顯示頁碼的結束 
$current_pager_end=($current_pager_start+$pager_size-1)>=$pager_num?$pager_num:($current_pager_start+$pager_size-1); 
//添加跳轉到上一層的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); 

//添加跳轉的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"] 
); 
//替換特定的標簽組成跳轉 
$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,支持重寫配置,各種參數的url 
*/ 
private function get_url() 

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

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

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

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

}else{ 
//直接附加參數形成分頁的完整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); 

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

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

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



/* 
* 構造跳轉功能腳本的方法 
*$url:需要跳轉的額那個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(\"在跳轉框中請輸入數字!\");\n". 
"}\n". 
"else{\n". 
"var re=/\{page\}/\n". 
"location.href='$url'.replace(re,jnum);\n". 
"}\n". 
"}\n". 
"</script>\n"; 
return $scriptstr; 

/* 
* php中構造類似.net中format方法的函數 
* 用法: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; 


?> 


直接用數組參數的方式調用 

復制代碼代碼如下:


<?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,代碼中出現的不規范,低效率,冗余或者設計問題還請大家多多指教。 

demo源碼下載

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲AV午夜精品麻豆AV | 国产一区二区三区四 | 青草视频在线观看免费视频 | 成人免费播放器 | 白丝美女同人18漫画 | 欧美老人与小伙子性生交 | 91久久碰国产 | 日本一区二区免费在线观看 | 色卡7707c| 九九精品免视看国产成人 | 日韩伦理在线看 | 男女精品视频 | 国产一区二区视频免费 | 日韩欧美一区二区三区四区 | 美女脱了内裤让男桶爽 | 久久国产乱子伦精品免费不卡 | 狠狠婷婷综合缴情亚洲 | 3d动漫美女被吸乳羞羞视频 | 欧美一卡2卡3卡四卡海外精品 | 成人男女网免费 | 天堂69亚洲精品中文字幕 | 欧美精品国产一区二区三区 | 国产精品视频人人做人人爱 | 99在线精品日韩一区免费国产 | 亚洲色图二区 | 500福利第一导航 | 九九精品免视频国产成人 | 美国一级大黄大色毛片 | 岛国最新资源网站 | 短篇同学新婚h系列小说 | 91麻豆精品国产片在线观看 | 男人狂擦女人的下面视频 | 性吟网 | 日本中文字幕在线观看视频 | 国产精品久久久久一区二区三区 | 韩国丽卡三级作品 | 欧美日韩在线一区 | 人人爱天天做夜夜爽88 | 国产亚洲女在线精品 | 美女的隐私脱裤子无遮挡 | 亚洲成A人片在线观看中文L |