显示周围的页码

时间:2010-04-21 14:36:59

标签: php pagination while-loop

我最近做了一些分页并使用了以下内容:

if ( $totalPages > $pagesToShow ) {
    $start = $pageNumber - floor($pagesToShow/2);
    $end = $pageNumber + floor($pagesToShow/2);

    while ( $start < 1 ) {
        $start++;
        $end++;
    }

    while ( $end > $totalPages ) {
        $start--;
        $end--;
    }

} else {
    $start = 1;
    $end = $totalPages;
}

找出开始和结束周围页面列表的位置。这样可以创建一个分页列表,如&lt;&lt; &LT; 1 b <2> 3 4 5> &GT;&GT;”。

只是想知道是否有更好的方法,因为使用这样的循环似乎有点奇怪。

2 个答案:

答案 0 :(得分:1)

您可以替换第一个循环

while ( $start < 1 ) {
    $start++;
    $end++;
}

if($start < 1)
{
    $end += (1 - $start);
    $start = 1;
}

可以为第二个循环做类似的事情,但反过来说:

if ( $end > $totalPages ) {
    $start -= ($end - $totalPages);
    $end = $totalPages;
}

编辑:修剪超出范围的页码更容易,用以下代码替换您的示例代码:

$start = $pageNumber - $pagesToShow;
$end = $pageNumber + $pagesToShow;

if($start < 1)
    $start = 1;

if($end > $totalPages)
    $end = $totalPages;

$pagesToShow是在当前页面之后之前显示的最大页面数量(如果不是超出范围)

答案 1 :(得分:0)

您可以查看使用Zend_Paginator控件。它适用于简单的数组,以及许多其他东西。它甚至可以让您轻松访问上一页/下一页信息。