首页 > php教程 > php手册 > 仿Aspnetpager的一个PHP分页类 附源码下载

仿Aspnetpager的一个PHP分页类 附源码下载

WBOY
发布: 2016-06-06 19:45:18
原创
1304 人浏览过

最近正在学习php,想拿一些demo来练习一下,想起前段时间自己用.net写的仿Aspnetpager控件的分页类,就琢磨着用PHP来实现仿aspnetpager的分页功能,随便复习下。 基本逻辑思路和.net的一样,就是将通过实体类来进行配置换成了通过数组进行配置,逻辑比较简单

最近正在学习php,想拿一些demo来练习一下,想起前段时间自己用.net写的仿Aspnetpager控件的分页类,就琢磨着用PHP来实现仿aspnetpager的分页功能,随便复习下。

基本逻辑思路和.net的一样,就是将通过实体类来进行配置换成了通过数组进行配置,逻辑比较简单,根据条件判断拼接分页html。

有以下几个简单的功能:

1:支持相关按钮的显示与否配置

3:支持url重写过的页面(需自己在配置数组中添加重写规则)

简单吧,还是直接上代码:

核心代码:pager.class.php

仿Aspnetpager的一个PHP分页类 附源码下载仿Aspnetpager的一个PHP分页类 附源码下载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\">\n"<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>$current_pager_end;<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>$pager_num-<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."\" />\n",
                    <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="%5C%22javascript:void(0);%5C%22" style='\"float:none;\"' onclick='\"javascript:jump();\"'>".<span>$this</span>->config['jump_btn_text']."</a>\n"<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>%24url</span>">$attr style=\"margin-right:5px;\"><span>$title</span></a>\n"<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='\""' .>$classname</span>. "\"><span>$num</span>\n"<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\"'>\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='<span>$url'.replace(re,jnum);\n".
                            "}\n".
                            "}\n".
                            "</script>\n"<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的图片:

仿Aspnetpager的一个PHP分页类 附源码下载

由于小弟最近刚刚学习php,代码中出现的不规范,低效率,冗余或者设计问题还请大家多多指教。

demo源码下载

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板