所以,我在这里阅读了所有相关问题,但它们不是我在这里问的问题,所以如果您觉得这个问题是重复的,请考虑一些 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>
Run Code Online (Sandbox Code Playgroud)
该代码通过 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
我该如何操作这段代码来实现这一目标?
嘿,大灰烬!
你已经快到了。您只需要检查几件事:
$i 位于页数开始或结束的两页内。这很容易,对吧?
if ($i <= 2 || $i >= $count_pages - 2)
Run Code Online (Sandbox Code Playgroud)
$i 是否在当前页面的两页之内?
这是通过以下方式实现的
if (abs($i - $page) <= 2)
Run Code Online (Sandbox Code Playgroud)
所以现在的问题仍然是:什么时候放置省略号?
如果每次不满足上述条件时都回显“...”,那么最终会得到一大堆省略号,对吧?
另外,您可能需要两个省略号(假设有 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;
}
}
Run Code Online (Sandbox Code Playgroud)