仿Aspnetpager的一个PHP分页类代码 附源码下载
前端之家收集整理的这篇文章主要介绍了
仿Aspnetpager的一个PHP分页类代码 附源码下载,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
基本逻辑思路和.net的一样,就是将通过实体类来进行配置换成了通过数组进行配置,逻辑比较简单,根据条件判断拼接分页html。
有以下几个简单的功能:
1:
支持相关按钮的
显示与否配置 @H_
502_2@2:
支持每页数目,文本
名称,html
标签类
名称的自由配置 @H_
502_2@3:
支持url重写过的
页面(需自己在配置数组中
添加重写规则)
简单吧,还是直接上代码:
核心
代码:pager.class.
PHP @H_
502_2@<div class="codetitle">
<a style="CURSOR: pointer" data="89957" class="copybut" id="copybut89957" onclick="doCopy('code89957')"> 代码如下: <div class="codebody" id="code89957"> @H_
502_2@<?
PHP @H_
5022@class pager{ @H502_2@//
分页的参数配置 @H_
5022@private $config=array( @H502_2@//
首页按钮的文本
文字 @H_
502_2@"first_btn_text"=>"
首页",@H_
502_2@//
上一页按钮的文本
文字,@H_
502_2@"pre_btn_text"=>"
上一页",@H_
502_2@//
下一页的文本
文字 @H_
502_2@"next_btn_text"=>"
下一页",@H_
502_2@//最后一页的文本
文字,@H_
502_2@"last_btn
text"=>"末页",@H5022@//总记录数 *必需 @H502_2@"record
count"=>0,@H502_2@//每页
分页尺寸 @H_
502_2@"pager
size"=>10,@H502_2@//当前
页码 必需 @H_502_2@"pagerindex"=>1,@H502_2@//每页显示的最大数量按钮 @H_502_2@"max_show_pagesize"=>10,@H502_2@//页码在浏览器中传值的名称 默认为page @H_502_2@"querystringname"=>"page",@H5022@//URL是否重写 默认为flase @H502_2@"enableurlrewriting"=>false,@H5022@//url重写规则 例如page/{page} 其中{page}就是代表页数 @H502_2@"urlrewritepattern"=>"",@H502_2@//分页容器的css名称 @H_5022@"classname"=>"paginator",@H502_2@//当前页按钮的class名称 @H_502_2@"current_btnclass"=>"cpb",@H502_2@//分页文字描述span标签的css @H_502_2@"span_textclass"=>"stc",@H502_2@/跳转的详细文本 @H_
5022@*totle代表总页数,@H5022@*size代表每页数目 @H502_2@
goto代表要跳转的输入框 @H_502_2@ record代表总记录数 @H_
502_2@
index代表当前的页码 @H_502_2@/ @H_
502_2@"jump_info_text"=>"共{totle}页,每页{size}条记录,
跳转到{goto}页",@H_
502_2@//
跳转按钮的文本 @H_
502_2@"jump_btn
text"=>"确定",@H502_2@//是否
显示跳转 @H_
502_2@"show
jump"=>false,@H502_2@//是否展示前面的按钮
首页&
上一页 @H_
502_2@"show_front
btn"=>true,@H502_2@//是否展示后面的按钮
下一页&末页 @H_
502_2@"show_last
btn"=>true @H5022@); @H5022@/* @H502_2@
类的构造函数 @H_502_2@ $config:该
分页类的配置 @H_
5022@*/ @H502_2@public function _
construct($config) @H5022@{ @H502_2@$this->init
config($config); @H5022@} @H502_2@function _
destruct() @H5022@{ @H5022@unset($this->config); @H5022@} @H5022@/* @H502_2@
构造分页主函数 @H_502_2@/ @H_
502_2@public function builder
pager() @H5022@{ @H502_2@//
分页的字符串 @H_
502_2@$pager
arr=array(); @H5022@//每页的尺寸 @H502_2@$pager_size=$this->config["pager
size"]; @H502_2@//得到一共的
分页数目 @H_
502_2@$pager_num=$this->config["record_count"]%$pager_size==0?$this->config["record_count"]/$pager_size:floor($this->config["record_count"]/$pager
size)+1; @H502_2@//当前的
页码序号 如果是0,则置为1 @H_
502_2@$pager_index=round($this->config["pager_index"])==0?1:round($this->config["pager
index"]); @H502_2@//如果当前的
页码大于等于最后一页,则当前的
页码置为最后一页 @H_
502_2@$pager_index=$pager_index>=$pager_num?$pager_num:$pager
index; @H502_2@//
下一页的
页码 @H_
502_2@$pager_next=$pager_index>=$pager_num?$pager_num:($pager
index+1); @H502_2@//
获取需要
跳转 的url @H_
502_2@$url=$this->get
url(); @H502_2@//
添加开头的div @H_
5022@$classname=$this->config["classname"]; @H502_2@$pager
arr[]="<div class=\"$classname\">\n"; @H502_2@//
添加前面两个按钮的html @H_
502_2@if($this->config["show_front
btn"]) @H5022@{ @H502_2@//如果当前的
页码为1 则front这两个按钮则会被禁用 @H_
502_2@$attr=$pager
index==1?"disabled=disabled":""; @H502_2@$pager_arr[]=$this->get_a_html(self::format_url($url,1),$this->config["first_btn
text"],$attr); @H502_2@$pager_arr[]=$this->get_a_html(self::format_url($url,$pager_index-1),$this->config["pre_btn
text"],$attr); @H5022@} @H502_2@//当前
显示页码的起始 1~10 1 11~20 11 @H_
502_2@$current_pager_start=$pager_index%$pager_size==0?($pager_index/$pager_size-1)
$pager_size+1:floor($pager_index/$pager_size)$pager
size+1; @H502_2@//当前
显示页码的结束 @H_
502_2@$current_pager_end=($current_pager_start+$pager_size-1)>=$pager_num?$pager_num:($current_pager_start+$pager
size-1); @H502_2@//
添加跳转到上一层的html @H_
502_2@if($pager_index>$pager
size) @H5022@{ @H502_2@$pager_arr[]=$this->get_a_html(self::format_url($url,$current_pager
start-1),"..."); @H5022@} @H502_2@//主体
页码部分 @H_
502_2@for($i=$current_pager_start;$i<=$current_pager
end;$i++) @H5022@{ @H502_2@if($i!=$pager
index) @H5022@{ @H502_2@$pager_arr[]=$this->get_a_html(self::format
url($url,$i),$i); @H5022@}else{ @H5022@//如果这个是当前页 @H502_2@$pager_arr[]=$this->get_span_html($i,$this->config["current_btn
class"]); @H5022@} @H5022@} @H502_2@//
添加下一层的html @H_
502_2@if($pager_index<=($pager_num-$pager_num%$pager
size)) @H5022@{ @H502_2@$pager_arr[]=$this->get_a_html(self::format_url($url,$current_pager
end+1),"..."); @H5022@} @H502_2@//
添加后面两个按钮的html @H_
502_2@if($this->config["show_last
btn"]) @H5022@{ @H502_2@//如果当前的
页码为最后一页 则last这两个按钮则会被禁用 @H_
502_2@$attr=$pager_index>=$pager
num?"disabled=disabled":""; @H502_2@$pager_arr[]=$this->get_a_html(self::format_url($url,$pager_next),$this->config["next_btn_text"],$pager_num),$this->config["last_btn
text"],$attr); @H5022@} @H502_2@//
添加跳转的html @H_
502_2@if($this->config["show
jump"]) @H5022@{ @H5022@$patterns=array("/{totle}/","/{size}/","/{goto}/","/{record}/","/{index}/",); @H5022@$replacements=array( @H502_2@$pager
num,@H502_2@$pager
size,@H502_2@"<input type=\"input\" id=\"jumpNum\" style=\"width:20px;\" name=\"jump\" value=\"".$pager
next."\" />\n",@H502_2@$this->config["record
count"],@H502_2@$this->config["pager
index"] @H5022@); @H502_2@//替换特定的
标签组成
跳转 @H_
502_2@$pager_arr[]=preg_replace($patterns,$replacements,$this->config["jump_info
text"]); @H502_2@$btn_text=$this->config['jump_btn
text']; @H502_2@$pager_arr[]="<a href=\"javascript:void(0);\" style=\"float:none;\" onclick=\"javascript:jump();\">".$this->config['jump_btn
text']."\n"; @H502_2@$pager_arr[]=$this->get
jumpscript($url); @H5022@} @H502_2@$pager
arr[]=" "; @H
502_2@$this->config["pager_index"]=$pager
index; @H502_2@return implode($pager
arr); @H5022@} @H5022@/* @H502_2@
获取需要处理的url,支持重写配置,各种参数的url @H_502_2@/ @H_
502_2@private function get
url() @H5022@{ @H5022@//如果设置了允许url重写 @H502_2@if($this->config["enable
urlrewriting"]) @H5022@{ @H502_2@//得到
调用文件所在的url @H_
502_2@$file_path="
http://".$_SERVER["HTTP_HOST"].$_SERVER["
PHPSELF"]; @H502_2@//得到
调用url所在的网络目录 @H_
502_2@$file_path=substr($file_path,strripos($file
path,"/"))."/"; @H5022@//直接将目录附加重写规则 形成新的url @H502_2@$url=$file_path.$this->config["urlrewrite
pattern"]; @H5022@}else{ @H502_2@//得到当前
调用页面的绝对url @H_
502_2@$url="
http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; @H_
502_2@//
分页参数在浏览器中传递的
名称 @H_
502_2@$querystring_name=$this->config['querystring
name']; @H502_2@//如果该url中包含
PHP?的字符串 则需要将
分页参数替换 @H_
502_2@if(strpos($url,"
PHP?")) @H_
5022@{ @H5022@//如果存在page=xxx的字样 @H502_2@$pattern="/$querystring
name=[0-9]*/"; @H502_2@if(preg
match($pattern,$url)) @H5022@{ @H5022@//将含page=***的字样中的数字替换成{0} @H502_2@$url=preg_replace($pattern,"$querystring
name={page}",$url); @H5022@}else{ @H502_2@$url.="&$querystring
name={page}"; @H5022@} @H5022@}else{ @H502_2@//直接附加参数形成
分页的完整url @H_
502_2@$url.="?$querystring
name={page}"; @H5022@} @H5022@} @H5022@return $url; @H5022@} @H5022@/* @H502_2@
得到a标签的html @H_502_2@$url:a
标签所要导向的html @H_
502_2@*$title:a
标签的
标题 @H_
502_2@*
$attr:a标签上的附加属性 可以不写 @H_502_2@/ @H_
502_2@private static function get_a
html($url,$title,$attr="") @H5022@{ @H502_2@return "<a href='$url' $attr style=\"margin-right:5px;\">$title\n";
}
/
获得span标签的html
$num:span中的文本,即页序号
$classname:span标签的class名称
/
private static function get_span_html($num,$classname)
{
return "<span class=\"" .$classname. "\">$num\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".
"\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;
}
}
?>