当前位置:
首页 > 技术 > PHP分页省略中间数字思路

PHP分页省略中间数字思路

<div class="page"> 
 <?php if ($page != 1) { ?>
 
 <a href="user_list.php?page=<?php echo $page - 1;?>">上一页</a> 
 
 <?php } 
 
 for ($i=1;$i<=$pagenum;$i++) { //循环显示出页面 
 
 
 if($i==$page){ 
 echo '<b>'.$i.'</b>';
 } else {
 echo "<a href='user_list.php?page=".$i."'>".$i."</a>";
 } 
 
 }
 if ($page<$pagenum) { //如果page小于总页数,显示下一页链接
 ?>
 
 <a href="user_list.php?page=<?php echo $page + 1;?>">下一页</a>
 <?php } ?>
 </div>

原效果: 上一页 123456 下一页
要是100个页面 变成: 上一页 123456.......100 下一页

涉及到这种变量较多的需求,可以先里清楚:哪些变量在一定条件是是不变的,而哪一些又是动态变化的。为了把问题说清楚,下面模拟定义几个涉及到分页的变量:

$total 总记录数
$pagesize 每页的记录数
$pagenum 总页码数
$page 当前页
$bothnum 当前页码两边显示的页码数量

好了,对于分页,涉及到变量就这么几个。为了解决这个问题,我们先固定住几个变量,如下

$total = 100;
$pagesize = 10;
$pagenum = $total / $pagesize = 10;

$bothnum = 5; //表示当前页码两边显示 5 个页码数量

因此,实际上目前就只有一个变量了就是 $page 表示当前页,所以在组装分页格式的时候,你只要关注 $page 参数的变化就可以了。

为了方便理解,我们准备把组装的分页信息都存储到一个字符串 $pagestr 中。好了准备工作已经完毕,下面就开始制作分页吧~~。

上一页

 if($page == 1) {
 $pagestr .= '<span>上一页</span>';
 } else {
 $pagestr .= '<a href="'.{$page-1}'">上一页</a>'
 }

中间的数字页码

 // 想象分页如下,目前第 10 页,它两边最多只有 5 (bothnum) 个数字
 1 ... 5 6 7 8 9 *10* 11 12 13 14 15 ... 100

首页(第 1 页)

if(($page - $bothnum) > 1) {
 $pagestr .= '<a href="?page=1"></a>';
 $pagestr .= '<span class="dotted">...</span>';
}

当前页的左边

 
 for($i=$bothnum; $i>=1; $i--) {
 if(($page - $i) < 1 ) { // 当前页左边花最多 bothnum 个数字
 continue;
 }
 $pagestr .= '<a href="?page='.($page - $i)."></a>';
 }

当前页

 $pagestr .= '<span class="current">'.$page.'</span>'; 

当前页的右边

for($i=1; $i<=$bothnum; $i++) {
 if(($page + $i) > $pagenum) { // 当前页右边最多 bothnum 个数字
 break;
 }
 $pagestr .= '<a href="?page='.($page + $i)."></a>';
}

尾页(第 100 页)

if(($page + $bothnum) < $pagenum) {
 $pagestr .= '<span class="dotted">...</span>';
 $pagestr .= '<a href="?page='.$pagenum.'"></a>';
}

下一页

全选复制放进笔记
 if($page == $pagenum) {
 $pagestr .= '<span>下一页</span>';
 } else {
 $pagestr .= '<a href="?page='.{$page+1}'">下一页</a>'
 }

原理就基本差不多是这样,其实这是对制作分页时思路的一种整理,上面的代码并没有经过测试,可以自己调试一下。

当然了,你也可以把它封装称为一个分页类,如果搞掂,也希望能够分享出来吧。

最后,实际上,还有比如并没有对分页参数进行处理,这个需要自己去做,只要把一些额外参数拼接上了就可以了,比较简单。

PHP分页省略中间数字思路:等您坐沙发呢!

发表评论

您必须 [ 登录 ] 才能发表留言!