PHP碎码——分页类
admin
2023-06-20 21:42:19
0



写了两个版本,还是后面好点,只计算关键数据,返回数组,html代码例外拼接

entry_total = (int)$entry_total;
        $this->page_size = (int)$page_size;
        $this->page_count = ceil($entry_total/$page_size);
        //分页栏的长度取用户提交的分页栏长度与页面总数中的较小值
        $this->page_li_count = $page_li_count > $this->page_count ? $this->page_count : $page_li_count;
        
    }

    
    /**
     * 设置当前页及active状态
     * @param unknown $page 合法参数为:first end 1234
     */
    public function setPage($page){
        if ($page == 'end') {
            $this->active = 'end';
            $this->page = $this->getPagecount();
        }elseif ($page>0 && $page<=$this->page_count) {
            $this->active = $page;
            $this->page = $page;
        }else{  //first或传递非法值的会被定到首页去
            $this->active = 'first';
            $this->page = 1;
        }
    }
    /**
     * 
     * @param unknown $url //该url末尾必需带有?或者&
     */
    public function setURL($url){
        
        $this->url = $url;
    }
    //当前页码
    public function getPage(){
        return $this->page;
    }
    //共计多少页
    public function getPagecount(){
        return $this->page_count;
    }
    //共计多少条记录
    public function getEntrycount(){
        return $this->entry_total;
    }
    
    /**
     * 计算当前页的分页栏需要的信息
     * @return 返回数组,包含拼接分页关键信息
     */
    public function create(){
        //首页
        $first_page= "first";
        //计算上页页码,最小为1
        $pre_page = ($this->page-1)<=1 ? 1 : $this->page-1;
        //计算下一页页码,最大为page_count
        $next_page = ($this->page+1)>=$this->page_count ? $this->page_count : $this->page+1;
        //尾页
        $end_page= "end";
        $nums_page = [];
        //这个判断与初始化变量中的判断重复了,但...安全点
        if ($this->page_count >= $this->page_li_count) {
            //中间li为第几个,偶数取中偏前的一个
            $mid_li = $this->page_li_count%2==0 ? $this->page_li_count/2 : (($this->page_li_count-1)/2)+1;
            //理想情况下,$mid_li后面li应有的个数
            $right_li_num = $this->page_li_count - $mid_li;
            //理想情况下,$mid_li前面li应有的个数
            $left_li_num = $mid_li-1;
            //计算最右边的页码
            if ($this->page <= $left_li_num) {
                //若当前页左边li个数不足以让其居中,则最右端页码等于最右端li的编号
                $right_li_page = $this->page_li_count;
            }else {
                $right_li_page = ($this->page_count-$this->page) >= $right_li_num ? $this->page+$right_li_num : $this->page_count;
            }
            for ($i = 0; $i < $this->page_li_count ; $i++) {
                //看着可能有点绕,纸上算算就知道了,已知最右边li的页码,li的总数,当前li的编号为$i+1,算当前li对应的页码
                $n = $right_li_page-$this->page_li_count+$i+1;
                $nums_page[] = $n;
            }
        }  
        //将这几个拼接起来
        $this->result['first'] = $first_page;
        $this->result['end'] = $end_page;
        $this->result['pre'] = $pre_page;
        $this->result['next'] = $next_page;
        $this->result['nums'] = $nums_page;
        $this->result['active'] = $this->active;
        return $this->result;
    }
    
    
    public function getHTML(){
        
        //待完善........
        $url = isset($this->url) ? $this->url : '?';
        
        $first_class = $this->result['active'] == 'first' ? 'active' : '';
        $end_class = $this->result['active'] == 'end' ? 'active' : '';
        $pre_class = $this->result['active'] == 'pre' ? 'active' : '';
        $next_class = $this->result['active'] == 'next' ? 'active' : '';
  
        $first_page_html = <<result['first']}">首页
HTML;
        $pre_page_html = <<result['pre']}">上一页
HTML;
        $next_page_html = <<result['next']}">下一页
HTML;
        $end_page_html = <<result['end']}">尾页
HTML;
        $lis_page_html = '';
        foreach ($this->result['nums'] as $v){
            $li_class =  $this->result['active'] == $v ? 'active' : '';
            $lis_page_html .= <<$v
HTML;
        }
        
        $htmlcode =  $first_page_html.$pre_page_html.$lis_page_html.$next_page_html.$end_page_html;
        
        return $htmlcode;
        
    }
    
}




/***********
 * 
 setPage( isset($_GET['page'])?$_GET['page']:1);
$a->create();

?>




    
    fenye
    


     
        getHTML()?>
    


 * 
 */


相关内容

热门资讯

又一家河南企业冲刺A+H上市!... 【大河财立方消息】 5月27日,大河财立方记者获悉,汉威科技集团股份有限公司(以下简称:汉威科技)正...
老佛爷百货败走西单,北京店今日... 【大河财立方 记者 王宁宁 王宇 北京报道 】 最后半天,打折清场了!”5月27日中午,大河财立方...
豫企IPO提速!本月6家河南企... 【大河财立方消息】继嘉晨智能、天海电子、洛轴股份、超聚变、鑫宇科技之后,本月又一家河南企业推进A股上...
科创板第二大IPO来了!存储芯... 【大河财立方消息】5月27日,国内存储芯片龙头长鑫科技科创板IPO,获上市委会议通过。长鑫科技此次I...
国安部披露:几百元家用气象站,... 一台售价仅几百元的家用气象站,竟24小时对着军事禁区采集气象数据并自动上传至境外服务器!这不是谍战片...
我国渤海一亿吨级油田全面投产 新华社北京5月27日电(记者王悦阳、梁姊)中国海油5月27日宣布,我国海上最大规模浅层岩性油田——垦...
河南公布2026年省级职业技能... 近日,河南省人力资源和社会保障厅印发《关于组织开展2026年河南省职业技能竞赛活动的通知》,明确20...
核查:起底“西藏寺庙漕强拆”A... 速览- 网传“中国西藏强拆寺庙”视频实为AI生成,所谓西藏现有寺庙“约70座”的说法同样不实。实际上...
伊朗先发制人了 伊朗这次先发制人了。我指的是舆论战场。以前的常态,一般都是特朗普率先放料,伊朗要投降了,伊朗急于达成...
视频丨无人机给电力设备做“体检... 记者从国家能源局了解到,为更好促进人工智能与能源双向赋能,我国正式对外公布了51个“人工智能+”能源...