如何用省略号建立分页

时间:2019-06-19 15:08:15

标签: 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>

该代码通过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

我该如何操纵此代码来实现这一目标?

1 个答案:

答案 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;

    }
}