易于使用的分页

时间:2012-04-11 08:30:47

标签: php pagination

我正在努力让一个漂亮的分页器工作,但我在使即将到来的/中间数字正常工作时遇到了麻烦。

目标是显示结果集的第一页和最后5页,无论您的页面是什么页面,但这些第一页和后五页只能显示是否有足够的页面允许它。

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

只有几页:&lt;&lt; 1 b <2> 3 4 5 6 7 8 9 10>&gt;

如何避免这种情况?:&lt;&lt; 1 2 3 4 5 - 5 6 7 - 7 8 9 10 11&gt;&gt;

到目前为止我的代码是:

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 ;

}

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

Pager PEAR class可以高度自定义,而且我已经取得了很大的成功。