为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用省略号构建分页

如何使用省略号构建分页

PHP
慕桂英3389331 2021-08-28 16:15:52
所以,我在这里阅读了所有相关问题,但它们不是我在这里问的问题,所以如果您觉得这个问题是重复的,请考虑一些 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 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

嘿,大灰!


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


在页数开始或结束的两页内是 $i。这很容易,对吧?


if ($i <= 2 || $i >= $count_pages - 2)

$i 是否在当前页面的两页之内?


这是通过


if (abs($i - $page) <= 2)

所以现在问题仍然存在:什么时候放省略号?


如果每次不满足上述条件时都只 echo '...' ,您最终会得到一大堆省略号,对吧?


此外,您可能需要两个省略号(假设有 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-08-28
  • 1 回答
  • 0 关注
  • 155 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信