写网站的时候经常会用到分页,如果自己写分页可能会被分页这个看似简单的东西搞的头大。
举个例子,我这个博客如果用普通模式看的话,首页大概有40多页的分页,现在有这样的需求:
“不管现在在哪一页,总是显示前后共10页,当前页尽可能居中。如果总数不满10页,则全部显示。前后如果超出则向后或向前递推。”
在我博客上(我博客总是显示9页)表现的就是。
这个看似简单的功能,在逻辑上还是有点复杂的。
特殊情况1:
当前在第一页,显示的就是1~10页,而不是-3~6,也不是1~6
特殊情况2:
假设共有100页,当前在第100页。那就应该显示91~100,不是96~105,也不是96~100。
特殊情况3:
当前共5页,那么,不管现在是第几页,则都应该显示1~5。
如果分别考虑这三种情况写起来会很麻烦,所以我给出一小段代码来计算开始页码和结束页码。如下:
$b = $this->_page + round($this->_size / 2);
$a = $b + 1 - $this->_size;
$min = 1;
$max = $pageCount;
echo "a: $a \r\n";
echo "b: $b \r\n";
echo "min: $min \r\n";
echo "max: $max \r\n";
// 主要是下面的两行
$start = max($a - min(0, $a - $min) + min(0, $max - $b), $min);
$end = min($b + min(0, $max - $b) - min(0, $a - $min), $max);
for ($i=$start; $i<=$end; $i++) {
echo $i, "\r\n";
}
如果发现有什么问题或者代码有bug请留言给我