我们经常在网上看到分页的出现,最近没事。看看公司的后台代码,对这个小模块进行封装。制作成一个函数。现在将自己的这个思考过程,写下来。
首先我们来看看分页的逻辑:首先我们要确定首页和尾页的限制,首页必须限定在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);
//获取所有的数据
//获得数据总条数
$sql
=
"select count(*) as total from news";
$resq
=
mysqli_query($obj,$sql);
$arr
=
mysqli_fetch_assoc($resq);
$totalRows
=$arr[
'total'];
上述就是我们的思考过程,附上所有的代码:
//当前页码数,默认当前页码为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>";
与所有的前端和后端爱好者共勉.....