【问题标题】:How to hide some pagination numbers in between and keep the first 3 page numbers and last page number如何在中间隐藏一些页码并保留前3页码和最后一页码
【发布时间】:2021-04-06 22:27:18
【问题描述】:

下面的 php 代码结果分页为 1, 2, 3, 4, 5, 6 , ...

我想得到结果为 1, 2, 3, ... ,10

    if ( is_array( $pages ) ) {
        $paged = ( get_query_var( 'paged' ) == 0 ) ? 1 : get_query_var( 'paged' );
        echo '<ul class="page-numbers nav-pagination links text-center">';
        foreach ( $pages as $page ) {
            $page = str_replace( 'page-numbers', 'page-number', $page );
            echo '<li>' . $page . '</li>';
        }
        echo '</ul>';
    }
?>

【问题讨论】:

  • 请阅读How to Ask。我们不希望您只告诉我们您想要什么,我们还想告诉我们您迄今为止为实现它所做的尝试。本网站不是代码编写服务。

标签: php wordpress pagination


【解决方案1】:

我想分享一个例子。

Adding dots between numbers of pagination

if ( is_array( $pages ) ) {

$paged = ( get_query_var( 'paged' ) == 0 ) ? 1 : get_query_var( 'paged' );

echo '<ul class="page-numbers nav-pagination links text-center">';

$i = '0';

foreach ( $pages as $page ) {

$page = str_replace( 'page-numbers', 'page-number', $page );

    $i++;

    if($i == 4){

        echo '...';

    } elseif($i < 4 || $i > (count($pages) -3)){

        echo '<li>' . $page . '</li>';

    }

}

echo '</ul>';

}

我认为它工作正常。

更正:您可以修复 $i == '4' 并在您指定的数字后添加“...”。或者您可以找到 $pages 数组的中值并将其替换为 4。

【讨论】:

  • 亲爱的 Metin,谢谢,这行得通,但你能修改它为 "i == 4" 吗?如何在当前页面之前显示所有页码,而“...”则在当前页面之后开始。因为使用当前代码,当我们在时,可以说。第 5 页,它不显示。谢谢
【解决方案2】:

根据代码,我认为$pages 是一个包含页码 1-10 的数组,您想要获取第一个 n 和列出的最后一个数字。

根据用例,有几种解决方案。

解决方案 1

如果列表始终以1 开头,并且您可以硬编码前三个元素和省略号,并且只将最后一个页码添加到列表中:

$pages = [1,2,3,4,5,6,7,8,9,10];
$n = 3;

for($k=1;$k<=$n;$k++) {
   echo "<li>$k</li>";
}
echo "<li>...</li><li>" . count($pages) . "</li>";

解决方案 2

如果由于某种原因您必须遍历整个 $pages 数组,那么您可以在第 n 个元素之后添加一个省略号,其余的不打印,只打印最后一个:

$pages = [1,2,3,4,5,6,7,8,9,10];
$n = 3;

foreach($pages as $page) {
    if($page <= $n || $page == count($pages))
        echo "<li>$page</li>";
    else if($page == $n+1) 
        echo "<li>...</li>";
    
    // something else for all pages
}

解决方案 3

您还可以使用一些高级索引来获取前 n 个元素和最后一个元素,并仅针对这些元素运行循环(如果页码不是 1、2、3、...,这也适用)

$pages = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X'];
$n = 3;

foreach(array_merge(range(0, $n-1), [count($pages)-1]) as $idx) {
    echo "<li>$pages[$idx]</li>";
    
    if($idx == $n-1) {
        echo "<li>...</li>";
    }
   
}

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多