欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

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

程序员文章站 2022-06-12 19:51:07
...

最近正在学习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

php
    class pager{
        //分页的参数配置
        private $config=array(
            //首页按钮的文本文字
            "first_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_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[]="
$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, "$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[]="".$this->config['jump_btn_text']."\n"; $pager_arr[]=$this->get_jumpscript($url); } $pager_arr[]="
"; $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; } /**/ private static function get_a_html($url,$title,$attr="") { return "$attr