PHP中分页功能的实现

     我们经常在网上看到分页的出现,最近没事。看看公司的后台代码,对这个小模块进行封装。制作成一个函数。现在将自己的这个思考过程,写下来。

  首先我们来看看分页的逻辑:首先我们要确定首页和尾页的限制,首页必须限定在1,尾页限制的数字,需要结合我们的数据库的数据条数,和每页的显示数量。尾页=ceil(数据库总条数/每页显示的数量),向上取整。这就是我们尾页的限制数字。接下来我们就要控制数字出现的规律了。如图所示:

                                                 

如果我们设定显示10页,那么当我们点击页码,当前页小于或者等于5页的时候,是一直停留在10页的位置(假设尾页没有限制的情况下),当点击的页数大于5时,随着我们的点击,页码也在往后推移,于是就出现了下面的规律,尾页=当前点击也+5,首页为尾页-9.通过这个规则我们可以书写出尾页和首页的范围。$totalpage为我们总页数的显示。也就是尾页的数量。

    if($curPage <=5){
        $begin =1;
        $end = $totalpage>=10?10:$totalpage;
    }else{
        $end = $curPage +5>$totalpage?$totalpage:$curPage +5;
        $begin =$end -9<=1?1:$end -9; 
    }

我们获得上面的规则就是分页的核心。然后当前点击的页码,需要特别标注一下,也就是当,当前页==我们的循环页码一项时,出现特殊标注。其他正常显示:

     for($i =$begin;$i <=$end;$i ++){
         //使用if实现高亮显示当前点击的页码
         if($curPage == $i){
            $pageNumString .= "<li class='active'><a href='listNews.php?curPage=$i '>$i </a></li>";
        } else{
            $pageNumString .= "<li><a href='listNews.php?curPage=$i '>$i </a></li>";
        }
    }
如上面的所示,这样我们就做到了点击当前页,当前页码特殊标注。剩下的事情就是我们完善一下。上一页和下一页的代码实现:

$prev = $curPage - 1 <= 1? 1:$curPage - 1;
$pageNumString .= "<li><a href='listNews.php?curPage=$prev '>&laquo;</a></li>";
$pageNumString .= "<li><a href='listNews.php?curPage=$next '>&raquo;</a></li>";
  $next = $curPage + 1 >=$totalpage?$totalpage:$curPage + 1;
点击的时候自动加一和减一。同时对页码进行限制,防止超出我们规定的范围。

$pageNumString .= "<li><a href='listNews.php?curPage=1'>首页</a></li>";
$pageNumString .= "<li><a href='listNews.php?curPage=$totalpage '>尾页</a></li>";
上面我们把首页和尾页对应的两个极限值写入代码中。对于代码每页显示的数量,我们需要使用SQL语句的查询的时候进行限制:

//人为的定义一个最大的页码数
$rowsPerPage = 10;
//获得数据
$offset = ($curPage - 1) *$rowsPerPage;
$sql = "select * from news order by n_sort desc limit $offset ,$rowsPerPage ";
$return = mysqli_query($obj,$sql); //获取所有的数据
主要是limit语句的使用。对于每页显示的数量,进行筛选。再次通过SQL语句查出所有的数据总数:

//获得数据总条数
$sql = "select count(*) as total from news";
$resq = mysqli_query($obj,$sql);
$arr = mysqli_fetch_assoc($resq);
$totalRows =$arr[ 'total'];
然后整个的逻辑我们走了下来,剩余的就是封装函数了,对于其中我们可以确定的是那些变量是参数:比如总页数,每页显示的数量,当前页码。三个变量作为函数的形参。接下来我们看看效果图:我们布局使用了 Bootstrap的布局样式:


上述就是我们的思考过程,附上所有的代码:

//当前页码数,默认当前页码为1
$curPage = isset($_GET[ 'curPage'])?$_GET[ 'curPage']: 1;

//获取所有的新闻数据

$obj = mysqli_connect( '127.0.0.1', 'root', '151766');
//设置字符集
$sql = "set names utf8";
$return = mysqli_query($obj,$sql);
//选择数据库
$sql = "use php1210";
$return = mysqli_query($obj,$sql);

//人为的定义一个最大的页码数
$rowsPerPage = 10;
//获得数据
$offset = ($curPage - 1) *$rowsPerPage;
$sql = "select * from news order by n_sort desc limit $offset ,$rowsPerPage ";
$return = mysqli_query($obj,$sql); //获取所有的数据

//获得数据总条数
$sql = "select count(*) as total from news";
$resq = mysqli_query($obj,$sql);
$arr = mysqli_fetch_assoc($resq);
$totalRows =$arr[ 'total'];

$totalpage = ceil($totalRows /$rowsPerPage);
//存储页码字符串
$pageNumString = "";

if($curPage <= 5){
$begin = 1;
$end = $totalpage >= 10? 10:$totalpage;
} else{
$end = $curPage + 5 >$totalpage?$totalpage:$curPage + 5;
$begin =$end - 9 <= 1? 1:$end - 9;
}
     //实现上一页
$prev = $curPage - 1 <= 1? 1:$curPage - 1;
$pageNumString .= "<li><a href='listNews.php?curPage=1'>首页</a></li>";
    $pageNumString .= "<li><a href='listNews.php?curPage=$prev '>&laquo;</a></li>";

     //根据起始页与终止页将当前页面的页码显示出来
     for($i =$begin;$i <=$end;$i ++){
         //使用if实现高亮显示当前点击的页码
         if($curPage == $i){
            $pageNumString .= "<li class='active'><a href='listNews.php?curPage=$i '>$i </a></li>";
        } else{
            $pageNumString .= "<li><a href='listNews.php?curPage=$i '>$i </a></li>";
        }
    }

     //实现下一页
    $next = $curPage + 1 >=$totalpage?$totalpage:$curPage + 1;
$pageNumString .= "<li><a href='listNews.php?curPage=$next '>&raquo;</a></li>";
$pageNumString .= "<li><a href='listNews.php?curPage=$totalpage '>尾页</a></li>";

与所有的前端和后端爱好者共勉.....

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值