以前做分页,总是“首页”、“上一页”、“下一页”、“尾页”这种分页方法,如果嫌不方便,最多加上一个“跳转至”,用多了就显得非常死板。
最近,看百度、贴吧都是用的另一种分页方法。即显示“上一页”(当最前面的页码不是1时),中间页码(如1 2 3 4 5),“下一页”(当最后的页码不等于总页数时)。
思考了一下,决定做一个仿百度的分页。程序中还是需要totalPage记录总页数,pageSize记录页面显示多少条记录,curPage记录当前页面数目。另外要增加firstPage记录中间页码的第一个页码数,endPage记录中间页码的最后一个页码数,pageNum记录中间页码的个数。然后根据curPage判断,firstPage=max(curPage-1,1),endPage=min(curPage+pageNum-2,totalPage)。
代码如下:
<?php
require_once("../src/bll/VoteService.php");
//当前页码
$curPage = 1;
//第一个页码
$firstPage = 1;
//总页数
$totalPage = 0;
//最后一个页码
$endPage = 1;
//一页显示5条主题
$pageSize = 1;
//中间的分页页码个数
$pageNum = 5;
$totalCount = VoteService::getItemNum();
$totalPage = floor($totalCount/$pageSize);
if($totalCount%$pageSize!=0){
$totalPage++;
}
if(isset($_GET["curPage"])){
$curPage = $_GET["curPage"];
}
if($totalPage<$pageNum){
$firstPage = 1;
$endPage = $totalPage;
}else{
if($curPage==1){
$firstPage = 1;
$endPage = $pageNum;
}else{
$firstPage = $curPage - 1;
$endPage = $curPage + $pageNum - 2;
if($endPage>$totalPage){
$endPage = $totalPage;
}
}
}
?>
分页条的代码如下:
<!--显示分页-->
<p style="margin-left:30px;margin-top:20px;">
<?php
if($firstPage!=1){
?>
<a href="main.php?lb=voteItemMan&curPage=<?php echo $curPage-1;?>" style="font-size:13px;text-decoration:none;color:orange;">上一页</a>
<?php
}
//显示中间的分页
for($i=$firstPage;$i<=$endPage;$i++){
?>
<a href="main.php?lb=voteItemMan&curPage=<?php echo $i;?>" style="font-size:13px;text-decoration:none;color:orange;"><?php echo $i;?></a>
<?php
}
if($endPage!=$totalPage){
?>
<a href="main.php?lb=voteItemMan&curPage=<?php echo $curPage+1;?>" style="font-size:13px;text-decoration:none;color:orange;">下一页</a>
<?php
}
?>
</p>
具体的显示效果如下图所示: