数据分页函数的编写

编写思路:
1.分页函数可以帮助我们完成select语句的limit部分

每页显示3条
limit ($_GET[$page]-1)*$page_size,$page_size //第一页 0,3
limit ($_GET[$page]-1)*$page_size,$page_size //第二页 3,3
limit ($_GET[$page]-1)*$page_size,$page_size //第三页 6,3


2.分页函数应该帮助我们设置好页码列表的html代码部分
(1)根据传入函数的$num_btn参数来显示按钮数目
1)要显示的按钮数目$num_btn大于总页码数目$page_num_all
2)$num_btn<$page_num_all
这种情况下我们有一种显示策略是:
理想状态:当前页的左边按钮数目应该和右边的按钮数目相等,或者右边多一个按钮
不理想的情况:1、左边第一个按钮号已经是<1了
                          2、最后一个按钮号已经是大于总页码数$page_num_all

if($num_btn>=$page_num_all){
        //把所有的页码按钮全部显示
        for($i=1;$i<=$page_num_all;$i++){//这边的$page_num_all是限制循环次数以控制显示按钮数目的变量,$i是记录页码号
            if($_GET[$page]==$i){
                $html[$i]="<span>{$i}</span>";
            }else{
                $html[$i]="<a href='{$url}{$i}'>{$i}</a>";
            }
        }
    }else{
        $num_left=floor(($num_btn-1)/2);
        $start=$_GET[$page]-$num_left;
        $end=$start+($num_btn-1); 
        if($start<1){
            $start=1;
        }
        if($end>$page_num_all){
            $start=$page_num_all-($num_btn-1);
        }
        for($i=0;$i<$num_btn;$i++){
            if($_GET[$page]==$start){
                $html[$start]="<span>{$start}</span>";
            }else{
                $html[$start]="<a href='{$url}{$start}'>{$start}</a>";
            }
            $start++;
        }
}

(2)当按钮数目大于等于3的时候做省略号效果:
         当第一个按钮的页码不是1的时候,我们就把第一个按钮替换成1...
         当最后一个按钮的页码不是$page_num_all的时候,我们就把最后一个按钮替换成...$page_num_all

if(count($html)>=3){
            reset($html);
            $key_first=key($html);
            end($html);
            $key_end=key($html);
            if($key_first!=1){
                array_shift($html);
                array_unshift($html,"<a href='{$url}1'>1...</a>");
            }
            if($key_end!=$page_num_all){
                array_pop($html);
                array_push($html,"<a href='{$url}{$page_num_all}'>...{$page_num_all}</a>");
            }
}

所有功能实现后php代码如下:

<?php 
header("Content-type:text/html;charset=utf-8");
/*
参数说明:
$count:总记录数
$page_size:每页显示的记录数
$num_btn:要展示的页码按钮数目
$page:分页的get参数
*/
function page($count,$page_size,$num_btn=10,$page='page'){
    if(!isset($_GET[$page]) || !is_numeric($_GET[$page]) || $_GET[$page]<1){
        $_GET[$page]=1;
    }
    //总页数
    $page_num_all=ceil($count/$page_size);
    if($_GET[$page]>$page_num_all){
        $_GET[$page]=$page_num_all;
    }
    $start=($_GET[$page]-1)*$page_size;
    $limit="limit {$start},{$page_size}";
    
    $current_url=$_SERVER['REQUEST_URI'];//获取当前界面url地址
    $arr_current=parse_url($current_url);//将当前url拆分到数组中
    $current_path=$arr_current['path'];//将文件路径保存起来
    $url='';
    if(isset($arr_current['query'])){
        parse_str($arr_current['query'],$arr_query);
        unset($arr_query[$page]);
        if(empty($arr_query)){
            $url="{$current_path}?{$page}=";
        }else{
            $other=http_build_query($arr_query);
            $url="{$current_path}?{$other}&{$page}=";
        }
    }else{
        $url="{$current_path}?{$page}=";
    }
    
    $html=array();
    if($num_btn>=$page_num_all){
        //把所有的页码按钮全部显示
        for($i=1;$i<=$page_num_all;$i++){//这边的$page_num_all是限制循环次数以控制显示按钮数目的变量,$i是记录页码号
            if($_GET[$page]==$i){
                $html[$i]="<span>{$i}</span>";
            }else{
                $html[$i]="<a href='{$url}{$i}'>{$i}</a>";
            }
        }
    }else{
        $num_left=floor(($num_btn-1)/2);
        $start=$_GET[$page]-$num_left;
        $end=$start+($num_btn-1); 
        if($start<1){
            $start=1;
        }
        if($end>$page_num_all){
            $start=$page_num_all-($num_btn-1);
        }
        for($i=0;$i<$num_btn;$i++){
            if($_GET[$page]==$start){
                $html[$start]="<span>{$start}</span>";
            }else{
                $html[$start]="<a href='{$url}{$start}'>{$start}</a>";
            }
            $start++;
        }
        //如果按钮数目大于等于3的时候做省略号效果
        if(count($html)>=3){
            reset($html);
            $key_first=key($html);
            end($html);
            $key_end=key($html);
            if($key_first!=1){
                array_shift($html);
                array_unshift($html,"<a href='{$url}1'>1...</a>");
            }
            if($key_end!=$page_num_all){
                array_pop($html);
                array_push($html,"<a href='{$url}{$page_num_all}'>...{$page_num_all}</a>");
            }
        }
    }
    //当前页不是第一页,触发上一页按钮
    if($_GET[$page]!=1){
        $prev=$_GET[$page]-1;
        array_unshift($html,"<a href='{$url}{$prev}'><< 上一页</a>");
    }
    //当前页不是最后一页,触发下一页按钮
    if($_GET[$page]!=$page_num_all){
        $next=$_GET[$page]+1;
        array_push($html,"<a href='{$url}{$next}'>下一页>>> </a>");
    }
    $html=implode(' ',$html);
    $data=array(
        'limit'=>$limit,
        'html'=>$html
    );
    return $data;
}
$page=page(100,10,5);
echo $page['html'];
?>

 

转载于:https://www.cnblogs.com/Emily-m/p/10741408.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值