仿tp5.0分页 实现逻辑

本文详细介绍了如何在PHP中实现分页功能,包括查询特定状态的用户数据、计算总记录数、确定每页显示的数据量及页数。此外,还展示了如何生成分页导航链接,确保用户体验的同时,提高网站性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 分页
 */
public function getPage(){
    // 查询状态为1的用户数据 并且每页显示20条数据 总记录数为$count
    $count = model('mi_pay/Orderex')->_where($this->g_where)->num();
    
    $length = ceil($count/20); //数量
    $page = input('page',1); //页数
    
    $first_ellipsis = false; //第一个省略号
    $first_num = 3; //左边届
    $second_num = $length-2; //右边界
    $second_ellipsis = false; //第二个省略号
    
    $model = request()->module(); //模块
    $controller = request()->controller(); //控制器
    $function = request()->action(); //方法
    
    $li_a_str = '<li><a href="/'.$model.'/'.$controller.'/'.$function.'.html?page=';
    $li_ellipsis = '<li class="disabled"><span>...</span></li>'; //省略号
    
    if ($length>11) {
        if ($page > 6) {
            $first_ellipsis = true;
            if ($page + 5 < $length) {
                $first_num = $page - 3;
            } else {
                $first_num = $length - 8;
            }
        }
        if ($page < $length-5) {
            $second_ellipsis = true;
            if ($page >= 7) {
                if ($page + 5 < $length) {
                    $second_num = $page + 3;
                } else {
                    $second_num = $length -2;
                }
            } else {
                $second_num = 8;
            }
        }
    }
    
    $new_page = '<ul class="pagination">';
    
    //上一页
    $new_page .= $page != 1 ? $li_a_str.($page-1).'">«</a></li>' : '<li class="disabled"><span>«</span></li>';
    
    for ($i = 1; $i <= $length; $i++) {
        $tmp = ($i != $page) ? $li_a_str.$i.'">'.$i.'</a></li>' : '<li class="active"><span>'.$i.'</span></li>';

        //1,2
        if ($i < 3) {
            $new_page .= $tmp;
        }
        
        // 中间
        if($i >= $first_num && $i <= $second_num){
            //第一个省略号
            if ($i == $first_num && $first_ellipsis) {
                $new_page .= $li_ellipsis;
            }
            
            $new_page .= $tmp;
            
            //第二个省略号
            if ($i == $second_num && $second_ellipsis) {
                $new_page .= $li_ellipsis;
            }
        }
        
        //倒数1,2
        if ($i > 2 && $i > $length - 2) {
            $new_page .= $tmp;
        }
    }
    
    //下一页
    $new_page .= $page != $length ? $li_a_str.($page+1).'">»</a></li>' : '<li class="disabled"><span>»</span></li>';
    
    $new_page .= '</ul>';
    
    $this->assign('new_page', $new_page);
}

效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值