最近正在学习php,想拿一些demo来练习一下,想起前段时间自己用.net写的仿aspnetpager控件的分页类,就琢磨着用php来实现仿aspnetpager的分页功能,随便复习下。 基本逻辑思路和.net的一样,就是将通过实体类来进行配置换成了通过数组进行配置,逻辑比较简单
最近正在学习php,想拿一些demo来练习一下,想起前段时间自己用.net写的仿aspnetpager控件的分页类,就琢磨着用php来实现仿aspnetpager的分页功能,随便复习下。
基本逻辑思路和.net的一样,就是将通过实体类来进行配置换成了通过数组进行配置,逻辑比较简单,根据条件判断拼接分页html。
有以下几个简单的功能:
1:支持相关按钮的显示与否配置
3:支持url重写过的页面(需自己在配置数组中添加重写规则)
立即学习“PHP免费学习笔记(深入)”;
简单吧,还是直接上代码:
核心代码:pager.class.php
SiteDynamic企业网站管理系统采用较为成熟的ASP+ACCESS编写,是迄今为止国内较先进的ASP语言企业网站管理系统。系统为企业级网站提供一个框架,能满足企业的基本应用,同时系统开放全部源码,用户可以根据自己的需求扩展出自己需求的模块,如:单页面、新闻、产品展示、下载、友情链接、电子商务、广告、会员、在线支付、人才招聘等。整套系统的设计构造,完全考虑大中小企业类网站的功能要求,网站的后台
0

View Code
<?<span>php
</span><span>class</span><span> pager{
</span><span>//</span><span>分页的参数配置</span>
<span>private</span> <span>$config</span>=<span>array</span><span>(
</span><span>//</span><span>首页按钮的文本文字</span>
"first_btn_text"=>"首页",
<span>//</span><span>//</span><span>//</span><span>最后一页的文本文字,</span>
"last_btn_text"=>"末页",
<span>//</span><span>总记录数 *必需</span>
"record_count"=>0,
<span>//</span><span>每页分页尺寸</span>
"pager_size"=>10,
<span>//</span><span>当前页码 *必需</span>
"pager_index"=>1,
<span>//</span><span>每页显示的最大数量按钮</span>
"max_show_page_size"=>10,
<span>//</span><span>页码在浏览器中传值的名称 默认为page</span>
"querystring_name"=>"page",
<span>//</span><span>URL是否重写 默认为flase</span>
"enable_urlrewriting"=><span>false</span>,
<span>//</span><span>url重写规则 例如page/{page} 其中{page}就是代表页数</span>
"urlrewrite_pattern"=>"",
<span>//</span><span>分页容器的css名称</span>
"classname"=>"paginator",
<span>//</span><span>当前页按钮的class名称</span>
"current_btn_class"=>"cpb",
<span>//</span>
"span_text_class"=>"stc",
<span>/*</span><span>跳转的详细文本
*totle代表总页数,
*size代表每页数目
* goto代表要跳转的输入框
* record代表总记录数
* index代表当前的页码
</span><span>*/</span>
"jump_info_text"=>"共{totle}页,每页{size}条记录,跳转到{goto}页",
<span>//</span><span>跳转按钮的文本</span>
"jump_btn_text"=>"确定",
<span>//</span><span>是否显示跳转</span>
"show_jump"=><span>false</span>,
<span>//</span>
"show_front_btn"=><span>true</span>,
<span>//</span>
"show_last_btn"=><span>true</span><span>
);
</span><span>/*</span><span>
* 类的构造函数
* $config:该分页类的配置
</span><span>*/</span>
<span>public</span> <span>function</span> __construct(<span>$config</span><span>)
{
</span><span>$this</span>->init_config(<span>$config</span><span>);
}
</span><span>function</span><span> __destruct()
{
</span><span>unset</span>(<span>$this</span>-><span>config);
}
</span><span>/*</span><span>
* 构造分页主函数
</span><span>*/</span>
<span>public</span> <span>function</span><span> builder_pager()
{
</span><span>//</span><span>分页的字符串</span>
<span>$pager_arr</span>=<span>array</span><span>();
</span><span>//</span><span>每页的尺寸</span>
<span>$pager_size</span>=<span>$this</span>->config["pager_size"<span>];
</span><span>//</span><span>得到一共的分页数目</span>
<span>$pager_num</span>=<span>$this</span>->config["record_count"]%<span>$pager_size</span>==0?<span>$this</span>->config["record_count"]/<span>$pager_size</span>:<span>floor</span>(<span>$this</span>->config["record_count"]/<span>$pager_size</span>)+1<span>;
</span><span>//</span><span>当前的页码序号 如果是0,则置为1</span>
<span>$pager_index</span>=<span>round</span>(<span>$this</span>->config["pager_index"])==0?1:<span>round</span>(<span>$this</span>->config["pager_index"<span>]);
</span><span>//</span><span>如果当前的页码大于等于最后一页,则当前的页码置为最后一页</span>
<span>$pager_index</span>=<span>$pager_index</span>>=<span>$pager_num</span>?<span>$pager_num</span>:<span>$pager_index</span><span>;
</span><span>//</span>
<span>$pager_next</span>=<span>$pager_index</span>>=<span>$pager_num</span>?<span>$pager_num</span>:(<span>$pager_index</span>+1<span>);
</span><span>//</span><span>获取需要跳转 的url</span>
<span>$url</span>=<span>$this</span>-><span>get_url();
</span><span>//</span><span>添加开头的div</span>
<span>$classname</span>=<span>$this</span>->config["classname"<span>];
</span><span>$pager_arr</span>[]="<div class="<span>$classname</span>">
"<span>;
</span><span>//</span><span>添加前面两个按钮的html</span>
<span>if</span>(<span>$this</span>->config["show_front_btn"<span>])
{
</span><span>//</span><span>如果当前的页码为1 则front这两个按钮则会被禁用</span>
<span>$attr</span>=<span>$pager_index</span>==1?"disabled=disabled":""<span>;
</span><span>$pager_arr</span>[]=<span>$this</span>->get_a_html(self::format_url(<span>$url</span>,1),<span>$this</span>->config["first_btn_text"],<span>$attr</span><span>);
</span><span>$pager_arr</span>[]=<span>$this</span>->get_a_html(self::format_url(<span>$url</span>,<span>$pager_index</span>-1),<span>$this</span>->config["pre_btn_text"],<span>$attr</span><span>);
}
</span><span>//</span><span>当前显示页码的起始 1~10 1 11~20 11</span>
<span>$current_pager_start</span>=<span>$pager_index</span>%<span>$pager_size</span>==0?(<span>$pager_index</span>/<span>$pager_size</span>-1)*<span>$pager_size</span>+1:<span>floor</span>(<span>$pager_index</span>/<span>$pager_size</span>)*<span>$pager_size</span>+1<span>;
</span><span>//</span><span>当前显示页码的结束</span>
<span>$current_pager_end</span>=(<span>$current_pager_start</span>+<span>$pager_size</span>-1)>=<span>$pager_num</span>?<span>$pager_num</span>:(<span>$current_pager_start</span>+<span>$pager_size</span>-1<span>);
</span><span>//</span><span>添加跳转到上一层的html</span>
<span>if</span>(<span>$pager_index</span>><span>$pager_size</span><span>)
{
</span><span>$pager_arr</span>[]=<span>$this</span>->get_a_html(self::format_url(<span>$url</span>,<span>$current_pager_start</span>-1),"..."<span>);
}
</span><span>//</span><span>主体页码部分</span>
<span>for</span>(<span>$i</span>=<span>$current_pager_start</span>;<span>$i</span><=<span>$current_pager_end</span>;<span>$i</span>++<span>)
{
</span><span>if</span>(<span>$i</span>!=<span>$pager_index</span><span>)
{
</span><span>$pager_arr</span>[]=<span>$this</span>->get_a_html(self::format_url(<span>$url</span>,<span>$i</span>),<span>$i</span><span>);
}</span><span>else</span><span>{
</span><span>//</span><span>如果这个是当前页</span>
<span>$pager_arr</span>[]=<span>$this</span>->get_span_html(<span>$i</span>,<span>$this</span>->config["current_btn_class"<span>]);
}
}
</span><span>//</span><span>添加下一层的html</span>
<span>if</span>(<span>$pager_index</span><=(<span>$pager_num</span>-<span>$pager_num</span>%<span>$pager_size</span><span>))
{
</span><span>$pager_arr</span>[]=<span>$this</span>->get_a_html(self::format_url(<span>$url</span>,<span>$current_pager_end</span>+1),"..."<span>);
}
</span><span>//</span><span>添加后面两个按钮的html</span>
<span>if</span>(<span>$this</span>->config["show_last_btn"<span>])
{
</span><span>//</span><span>如果当前的页码为最后一页 则last这两个按钮则会被禁用</span>
<span>$attr</span>=<span>$pager_index</span>>=<span>$pager_num</span>?"disabled=disabled":""<span>;
</span><span>$pager_arr</span>[]=<span>$this</span>->get_a_html(self::format_url(<span>$url</span>,<span>$pager_next</span>),<span>$this</span>->config["next_btn_text"],<span>$attr</span><span>);
</span><span>$pager_arr</span>[]=<span>$this</span>->get_a_html(self::format_url(<span>$url</span>,<span>$pager_num</span>),<span>$this</span>->config["last_btn_text"],<span>$attr</span><span>);
}
</span><span>//</span><span>添加跳转的html</span>
<span>if</span>(<span>$this</span>->config["show_jump"<span>])
{
</span><span>$patterns</span>=<span>array</span>("/{totle}/","/{size}/","/{goto}/","/{record}/","/{index}/",<span>);
</span><span>$replacements</span>=<span>array</span><span>(
</span><span>$pager_num</span>,
<span>$pager_size</span>,
"<input type="input" id="jumpNum" style="width:20px;" name="jump" value="".<span>$pager_next</span>."" />
",
<span>$this</span>->config["record_count"],
<span>$this</span>->config["pager_index"<span>]
);
</span><span>//</span>
<span>$pager_arr</span>[]=<span>preg_replace</span>(<span>$patterns</span>,<span>$replacements</span>,<span>$this</span>->config["jump_info_text"<span>]);
</span><span>$btn_text</span>=<span>$this</span>->config['jump_btn_text'<span>];
</span><span>$pager_arr</span>[]="<a href="javascript:void(0);" style="float:none;" onclick="javascript:jump();">".<span>$this</span>->config['jump_btn_text']."</a></span>
"<span>;
</span><span>$pager_arr</span>[]=<span>$this</span>->get_jumpscript(<span>$url</span><span>);
}
</span><span>$pager_arr</span>[]="</div>"<span>;
</span><span>$this</span>->config["pager_index"]=<span>$pager_index</span><span>;
</span><span>return</span> <span>implode</span>(<span>$pager_arr</span><span>);
}
</span><span>/*</span><span>
*获取需要处理的url,支持重写配置,各种参数的url
</span><span>*/</span>
<span>private</span> <span>function</span><span> get_url()
{
</span><span>//</span><span>如果设置了允许url重写</span>
<span>if</span>(<span>$this</span>->config["enable_urlrewriting"<span>])
{
</span><span>//</span><span>得到调用文件所在的url</span>
<span>$file_path</span>="http://".<span>$_SERVER</span>["HTTP_HOST"].<span>$_SERVER</span>["PHP_SELF"<span>];
</span><span>//</span><span>得到调用url所在的网络目录</span>
<span>$file_path</span>=<span>substr</span>(<span>$file_path</span>,0,<span>strripos</span>(<span>$file_path</span>,"/"))."/"<span>;
</span><span>//</span><span>直接将目录附加重写规则 形成新的url</span>
<span>$url</span>=<span>$file_path</span>.<span>$this</span>->config["urlrewrite_pattern"<span>];
}</span><span>else</span><span>{
</span><span>//</span><span>得到当前调用页面的绝对url</span>
<span>$url</span>="http://".<span>$_SERVER</span>["HTTP_HOST"].<span>$_SERVER</span>["REQUEST_URI"<span>];
</span><span>//</span><span>分页参数在浏览器中传递的名称</span>
<span>$querystring_name</span>=<span>$this</span>->config['querystring_name'<span>];
</span><span>//</span><span>如果该url中包含php?的字符串 则需要将分页参数替换</span>
<span>if</span>(<span>strpos</span>(<span>$url</span>,"php?"<span>))
{
</span><span>//</span><span>如果存在page=xxx的字样</span>
<span>$pattern</span>="/<span>$querystring_name</span>=[0-9]*/"<span>;
</span><span>if</span>(<span>preg_match</span>(<span>$pattern</span>,<span>$url</span><span>))
{
</span><span>//</span><span>将含page=***的字样中的数字替换成{0}</span>
<span>$url</span>=<span>preg_replace</span>(<span>$pattern</span>,"<span>$querystring_name</span>={page}",<span>$url</span><span>);
}</span><span>else</span><span>{
</span><span>$url</span>.="&<span>$querystring_name</span>={page}"<span>;
}
}</span><span>else</span><span>{
</span><span>//</span><span>直接附加参数形成分页的完整url</span>
<span>$url</span>.="?<span>$querystring_name</span>={page}"<span>;
}
}
</span><span>return</span> <span>$url</span><span>;
}
</span><span>/*</span><span>*/</span>
<span>private</span> <span>static</span> <span>function</span> get_a_html(<span>$url</span>,<span>$title</span>,<span>$attr</span>=""<span>)
{
</span><span>return</span> "<a href='<span>$url</span>' <span>$attr</span> style="margin-right:5px;"><span>$title</span></a>
"<span>;
}
</span><span>/*</span><span>*/</span>
<span>private</span> <span>static</span> <span>function</span> get_span_html(<span>$num</span>,<span>$classname</span><span>)
{
</span><span>return</span> "<span class="" .<span>$classname</span>. ""><span>$num</span></span>
"<span>;
}
</span><span>/*</span><span>
* 格式化url
* $url 原url
* $page 页码
</span><span>*/</span>
<span>private</span> <span>static</span> <span>function</span> format_url(<span>$url</span>,<span>$page</span><span>)
{
</span><span>return</span> <span>preg_replace</span>("/{page}$/",<span>$page</span>,<span>$url</span><span>);
}
</span><span>/*</span><span>
*初始化分页的配置文件
*如果在参数中不含该键值,则默认使用申明的值
</span><span>*/</span>
<span>private</span> <span>function</span> init_config(<span>$config</span><span>)
{
</span><span>//</span><span>判断该值是否存在、是否是数组、是否含有记录</span>
<span>if</span>(<span>isset</span>(<span>$config</span>)&&<span>is_array</span>(<span>$config</span>)&&<span>count</span>(<span>$config</span>)>0<span>){
</span><span>foreach</span>(<span>$config</span> <span>as</span> <span>$key</span>=><span>$val</span><span>)
{
</span><span>$this</span>->config[<span>$key</span>]=<span>$val</span><span>;
}
}
}
</span><span>/*</span><span>
* 构造跳转功能脚本的方法
*$url:需要跳转的额那个url
</span><span>*/</span>
<span>private</span> <span>function</span> get_jumpscript(<span>$url</span><span>)
{
</span><span>$scriptstr</span> = "<script type="text/javascript">
".
"function jump(){
".
"var jnum=document.getElementById("jumpNum").value;
".
"if(isNaN(jnum)){
".
"alert("在跳转框中请输入数字!");
".
"}
".
"else{
".
"var re=/{page}/
".
"location.href='<span>$url</span>'.replace(re,jnum);
".
"}
".
"}
".
"</script>
"<span>;
</span><span>return</span> <span>$scriptstr</span><span>;
}
</span><span>/*</span><span>
* php中构造类似.net中format方法的函数
* 用法:format("hello,{0},{1},{2}", 'x0','x1','x2')
</span><span>*/</span>
<span>private</span> <span>function</span><span> format() {
</span><span>$args</span> = <span>func_get_args</span><span>();
</span><span>if</span> (<span>count</span>(<span>$args</span>) == 0) { <span>return</span><span>;}
</span><span>if</span> (<span>count</span>(<span>$args</span>) == 1) { <span>return</span> <span>$args</span>[0<span>]; }
</span><span>$str</span> = <span>array_shift</span>(<span>$args</span><span>);
</span><span>$str</span> = <span>preg_replace_callback</span>('/\{(0|[1-9]\d*)\}/', <span>create_function</span>('$match', '$args = '.<span>var_export</span>(<span>$args</span>, <span>true</span>).'; return isset($args[$match[1]]) ? $args[$match[1]] : $match[0];'), <span>$str</span><span>);
</span><span>return</span> <span>$str</span><span>;
}
}
</span>?>直接用数组参数的方式调用
<?<span>php
</span><span>$config1</span>=<span>array</span><span>(
</span>"record_count"=>703,
"pager_size"=>10,
"show_jump"=><span>true</span>,
"pager_index"=><span>$_GET</span>["page"<span>]
);
</span><span>$pager_simple</span>=<span>new</span> pager(<span>$config1</span><span>);
</span><span>echo</span> <span>$pager_simple</span>-><span>builder_pager();
</span>?>最后来看下demo的图片:

由于小弟最近刚刚学习php,代码中出现的不规范,低效率,冗余或者设计问题还请大家多多指教。
demo源码下载
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号