°

PHP原生经典分页

2019年课程规划及价格说明


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'>«</a></li>";
$pageNumString .="<li><a href='listNews.php?curPage=$next'>»</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'>«</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'>»</a></li>";
$pageNumString .="<li><a href='listNews.php?curPage=$totalpage'>尾页</a></li>";
打赏
  喜欢