Если все, что вам не нравится, это ссылки, то вы можете изменить цикл в конце, чтобы напечатать нужные ссылки. Это просто вопрос манипулирования номерами страниц.
(Я не знаю, откуда у вас этот код, но «страница 0» не удобна даже для программистов, которые десятилетиями работали со смещением 0! А если вы знаете размер вашей страницы, то смещение не нужно данные, и поскольку это указывает на больший размер страницы, это также неправильно .)
Итак, самое простое изменение:
my $pageN;
if ( $pageNum > 0 ) {
print q[<td><a href="?pageNum=1">|<</a></td>];
$pageN = $pageNum - 1;
print qq[<td><a href="?pageNum=$pageN"><</a></td>];
}
else { # don't link to the current page
print q[<td><span class="currentpage">|<</span></td>];
print q[<td><span class="currentpage"><</span></td>];
}
if ( $pageNum < ( $numofPages - 1 )) {
$pageN = $pageNum + 1;
print qq[<td><a href="?pageNum=$pageN">></a></td>];
print qq[<td><a href="?pageNum=$numofPages">>|</a></td>];
}
else { # don't link to the current page
print q[<td><span class="currentpage">></span></td>];
print q[<td><span class="currentpage">>|</span></td>];
}
Просто примечание: отсутствие ссылки на текущую страницу помогает пользователю быстрее понять, где он находится в списке. Также это означает, что они не могут попасть на сервер просто , чтобы перезагрузить страницу. Вы хотите иметь возможность четко сообщить, что они уже находятся на первой или последней странице.
Однако, часть вашего вопроса заключается в том, как бы вы сделали это в Perl CGI . Используя настоящий Perl CGI, вы не print '<td>'
. Вы используете методы для создания тегов:
my @cells
= map {
my ( $page, $text ) = @$_;
( $query->td(
$page > 0 and $page <= $numofPages and $pageNum != $page
? $query->a( { href => "?pageNum=$page" }, $text )
: $query->span( { -class => 'currentpage' }, $text )
), "\n"
)
} ( [ 1 => '|<' ]
, [ ( $pageNum - 1 ) => '<' ]
, [ ( $pageNum + 1 ) => '>' ]
, [ $numofPages => '>|' ]
)
;
print $query->table(
{ -class => 'pagenav', -border => 1 }
, $query->Tr( { -class => 'pagenavrow' } @cells )
);
Вы должны заметить, что я также изменил его, чтобы ваша первая страница тоже была # 1.
Поскольку вы указали, что вам могут понадобиться и некоторые номера страниц, единственным
Корректировка, которую я должен был сделать, заключалась в том, чтобы вычислить минимальный и максимальный диапазон, например:
use List::Util qw<max min>;
my $min_page = max( 1, $pageNum - 5 );
my $max_page = min( $numofPages, $min_page + 10 );
$min_page = max( 1, min( $min_page, $max_page - 10 ));
И используйте эти значения, чтобы добавить пронумерованные ссылки на страницы в список, переданный в map
, создав @cells
:
( [ 1 => '|<' ]
, [ ( $pageNum - 1 ) => '<' ]
, ( map { [ $_ => $_ ] } $min_page..$max_page )
, [ ( $pageNum + 1 ) => '>' ]
, [ $numofPages => '>|' ]
)