如何使用省略号构建分页

Ash*_*hin 5 php pagination

所以,我在这里阅读了所有相关问题,但它们不是我在这里问的问题,所以如果您觉得这个问题是重复的,请考虑一些 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

我该如何操作这段代码来实现这一目标?

Mic*_*son 5

嘿,大灰烬!

你已经快到了。您只需要检查几件事:

$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)