показ номеров окружающих страниц - PullRequest
1 голос
/ 21 апреля 2010

Недавно я делал пагинацию и использовал следующее:

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;
}

чтобы определить, где начинать и заканчивать список окружающих страниц. Так что список подкачки может быть создан как << <1 <b>2 3 4 5> >> '.

Просто интересно, есть ли лучший метод, так как использование таких циклов кажется немного странным.

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

Вы можете заменить первый цикл

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 - максимальное количествостраницы, отображаемые до и после текущей страницы (если не вне границ)

0 голосов
/ 21 апреля 2010

Возможно, вы захотите использовать элемент управления Zend_Paginator . Работает с простыми массивами, а также со многими другими вещами. Он даже справится с предоставлением вам простого доступа к информации о предыдущей / следующей странице.

...