所以,我在这里阅读了所有相关问题,但不是我在这里问的问题,因此,如果您觉得这个问题是重复的,请考虑对PHP进行一些新的询问,该人找不到任何好的答案,问请不要拒绝投票,这也许有人想帮助我。谢谢
这是我的分页代码:
<?php
$per_page = 10;
if(isset($_GET['page'])){
$page = $_GET['page'];
} else {
$page = 1;
}
if($page == "" || $page == 1) {
$page_1 = 0;
} else {
$page_1 = ($page * $per_page) - $per_page;
}
$item_count = "SELECT * FROM products";
$find_count = mysqli_query($connection, $item_count);
$count = mysqli_num_rows($find_count);
$count_pages = ceil($count / $per_page) ;
?>
<ul class="pagination">
<?php
for($i = 1; $i <= $count_pages; $i++){
if($i == $page) {
echo "<li><a class='active-page' href='./latest.php?page=$i'>$i</a></li>";
} else {
echo "<li><a href='./latest.php?page=$i'>$i</a></li>";
}
}
?>
</ul>
该代码通过Get请求获取页码,并进行页数循环。分页输出是这样的:
1 2 3 4 5 6 7 8 9 10
但是我不想像上面那样显示,我想用“ ...”来使它更短,如果用户在第3页上,就像这样:
1 2 3 4 5 ... 9 10
或用户位于第9页上:
1 2 ... 7 8 9 10
我该如何操纵此代码来实现这一目标?
答案 0 :(得分:1)
嘿,大灰烬!
您已经快要在那里了。您只需要检查几件事:
是$ i,位于页数开始或结尾的两页之内。很简单,对吧?
if ($i <= 2 || $i >= $count_pages - 2)
$ i是否在当前页面的两页之内?
这是通过
实现的if (abs($i - $page) <= 2)
所以现在的问题仍然是:什么时候放省略号?
如果每次不满足上述条件时仅回声“ ...”,您将得到一堆椭圆,对吗?
此外,可能还需要两个椭圆(假设有20页,而您在第10页上。您想要'1 2 ... 8 9 10 11 12 ... 19 20)。
我敢肯定有一种更优雅的方法,但是我只是使用一个标志($ outOfRange),当满足上述任何条件时,将其设置为false,但如果不满足,则将其设置为true。然后,仅当不满足条件但$ outOfRange仍然为false时,我们才回显“ ...”。所以我们有:
$outOfRange = false;
for($i = 1; $i <= $count_pages; $i++) {
if ($i <= 2 || $i >= $count_pages - 2 || abs($i - $page) <= 2) {
// page number should be echoed so do as you did before
$outOfRange = false;
if($i == $page) {
echo "<li><a class='active-page' href='./latest.php?page=$i'>$i</a></li>";
} else {
echo "<li><a href='./latest.php?page=$i'>$i</a></li>";
}
} else {
// we are out of range! if not already out of range, echo ellipsis
if (!$outOfRange) {
echo ' ... ';
}
$outOfRange = true;
}
}