【问题标题】:How to build a pagination with ellipsis如何使用省略号构建分页
【发布时间】:2019-06-20 02:19:39
【问题描述】:

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

我怎样才能操纵这段代码来实现这一点?

【问题讨论】:

    标签: php pagination


    【解决方案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;
    
        }
    } 
    

    【讨论】:

    • 非常感谢迈克尔·比森。我真的很感谢你的回答,你教会了我一些有价值的东西:)
    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    相关资源
    最近更新 更多