1

我正在尝试让一个不错的分页器工作,但我无法让即将到来的/中间数字正常工作。

目标是显示结果集的前 5 页和后 5 页,而不管您在哪个页面上,但这些前 5 页和后 5 页只能在有足够的页面允许的情况下显示。

分页看起来像这样: << 1 2 3 4 5 - 12 13 14 - 78 79 80 81 82 >>

只有几页:<< 1 2 3 4 5 6 7 8 9 10 >>

以及如何避免这种情况?:<< 1 2 3 4 5 - 5 6 7 - 7 8 9 10 11 >>

到目前为止,我的代码是:

function pagination_links($page, $num_rows, $results_per_page, $each_direction = 3) 
{ 
$total_pages = $num_rows ? ceil($num_rows / $results_per_page) : 1 ; 
if($total_pages < 2) 
{ 
    return null; 
} 
$page = ((is_numeric($page)) && ($page >= 1) && ($page <= $total_pages)) ? (int)$page : 1 ; 
$output = null; 
if($page > 1) 
{ 
    $output .= '<div class="pageBtn"><<</div>' ; 
}
else
{
    $output .= '<div class="pageBtnDis"><<</div>' ;
}

for($i=1;$i<$total_pages;$i++)
{
     if($page != $i) 
    { 
        $output .= '<div class="pageBtn">' . $i . '</div>' ; 
    } 
    else 
    { 
        $output .= '<div class="pageBtnSet">' . $i . '</div>' ;
    }
    if($i > 4)
    {
        break ;
    }
}

for($i = $page - $each_direction; $i <= $page + $each_direction; $i++) 
{ 
    if(($i > 5) && ($i <= $total_pages-5)) 
    { 
        if($page != $i) 
        { 
            $output .= '<div class="pageBtn">' . $i . '</div>' ; 
        } 
        else 
        { 
            $output .= '<div class="pageBtnSet">' . $i . '</div>' ;
        } 
    } 
}

for($i = $total_pages-5;$i<$total_pages;$i++) {
    if($page != $i) 
        { 
            $output .= '<div class="pageBtn">' . $i . '</div>' ; 
        } 
        else 
        { 
            $output .= '<div class="pageBtnSet">' . $i . '</div>' ;
        } 
}
if($page < $total_pages) 
{ 
    $output .= '<div class="pageBtn">>></div>' ; 
}
else
{
    $output .= '<div class="pageBtnDis">>></div>' ;
}
return $output ;

}

4

2 回答 2

4

我认为目前最好的解决方案是使用Digg Style Pagination Class。它极大地简化了分页标记的创建和样式。

于 2012-04-11T09:06:20.147 回答
0

Pager PEAR 类是高度可定制的,我已经取得了很大的成功。

于 2013-01-07T16:21:15.697 回答