扫码关注官方订阅号
这是我写的PHP简单分页 正常输出 1234567 没有问题,但是 要是100多页, 怎样在 12345....100 省略中间 多个数字呢?
上一页 '.$i.''; } else { echo "".$i.""; } } if ($page<$pagenum) { //如果page小于总页数,显示下一页链接 ?> 下一页
原效果: 上一页 123456 下一页要是100个页面 变成: 上一页 123456.......100 下一页
人生最曼妙的风景,竟是内心的淡定与从容!
涉及到这种变量较多的需求,可以先里清楚:哪些变量在一定条件是是不变的,而哪一些又是动态变化的。为了把问题说清楚,下面模拟定义几个涉及到分页的变量:
$total 总记录数 $pagesize 每页的记录数 $pagenum 总页码数 $page 当前页 $bothnum 当前页码两边显示的页码数量
好了,对于分页,涉及到变量就这么几个。为了解决这个问题,我们先固定住几个变量,如下
$total = 100; $pagesize = 10; $pagenum = $total / $pagesize = 10; $bothnum = 5; //表示当前页码两边显示 5 个页码数量
因此,实际上目前就只有一个变量了就是 $page 表示当前页,所以在组装分页格式的时候,你只要关注 $page 参数的变化就可以了。
$page
为了方便理解,我们准备把组装的分页信息都存储到一个字符串 $pagestr 中。好了准备工作已经完毕,下面就开始制作分页吧~~。
$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>' }
原理就基本差不多是这样,其实这是对制作分页时思路的一种整理,上面的代码并没有经过测试,可以自己调试一下。
当然了,你也可以把它封装称为一个分页类,如果搞掂,也希望能够分享出来吧。
最后,实际上,还有比如并没有对分页参数进行处理,这个需要自己去做,只要把一些额外参数拼接上了就可以了,比较简单。
你要先定义一个$limitPage,比如为10,最多显示10页。那你的循环里面就不能用$pagenum,你要先比较和$limitPage的大小,然后选择来循环输出。多的就有省略号,和输出最后一页。这里面有很多情况要考虑,总页面数为0,总页面数小于等于$limitPage,总页面数大于$limitPage。当前页面数和剩余页面数跟$limitPage的比较。细节比较多,好好理一下。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
涉及到这种变量较多的需求,可以先里清楚:哪些变量在一定条件是是不变的,而哪一些又是动态变化的。为了把问题说清楚,下面模拟定义几个涉及到分页的变量:
好了,对于分页,涉及到变量就这么几个。为了解决这个问题,我们先固定住几个变量,如下
因此,实际上目前就只有一个变量了就是
$page表示当前页,所以在组装分页格式的时候,你只要关注$page参数的变化就可以了。为了方便理解,我们准备把组装的分页信息都存储到一个字符串
$pagestr中。好了准备工作已经完毕,下面就开始制作分页吧~~。上一页
中间的数字页码
首页(第 1 页)
当前页的左边
当前页
当前页的右边
尾页(第 100 页)
下一页
原理就基本差不多是这样,其实这是对制作分页时思路的一种整理,上面的代码并没有经过测试,可以自己调试一下。
当然了,你也可以把它封装称为一个分页类,如果搞掂,也希望能够分享出来吧。
最后,实际上,还有比如并没有对分页参数进行处理,这个需要自己去做,只要把一些额外参数拼接上了就可以了,比较简单。
你要先定义一个$limitPage,比如为10,最多显示10页。
那你的循环里面就不能用$pagenum,你要先比较和$limitPage的大小,然后选择来循环输出。多的就有省略号,和输出最后一页。
这里面有很多情况要考虑,总页面数为0,总页面数小于等于$limitPage,总页面数大于$limitPage。
当前页面数和剩余页面数跟$limitPage的比较。细节比较多,好好理一下。