Nur Seiten anzeigen die...
- Erste oder letzte Seite sind
- In der Nähe der aktuellen Seite (+-3)
- 10,50,100,500,1000,5000 Seiten von der aktuellen entfernt sind
our @ISA = qw(Exporter);
our @EXPORT = qw(paginate);
+use List::MoreUtils qw(any);
+
sub paginate {
my ($self, %params) = @_;
my $page = $params{page} || 1;
my ($cur, $max) = @_;
return [
map {
- active => $_ != $cur,
- page => $_,
+ active => $_ != $cur,
+ page => $_,
+ visible =>
}, 1 .. $max
];
}
+sub calc_visibility {
+ my ($cur, $max, $this) = @_;
+ any { $_ } abs($cur - $this) < 5,
+ $cur <= 3,
+ $cur == $max,
+ any { ! abs ($cur - $this) % $_ } 10, 50, 100, 500, 1000, 5000;
+}
+
1;
__END__
[%- IF pages.max > 1 %]
-[%- IF pages.cur > 1 %]<a href='[% base_url _ "&page=" _ (pages.cur - 1) %]'>«</a> [%- END %]
+[%- IF pages.cur > 1 %]<a href='[% base_url _ "&page=" _ (pages.cur - 1) %]'>«</a> [% ELSE %]<b>«</b> [% END %]
[%- FOR p = pages.common %]
- [%- IF p.active %]<a href="[% base_url _ "&page=" _ p.page %]">[% p.page %]</a>
- [%- ELSE %]<b>[% p.page %]</b>
- [%- END %]
- [%- ' ' UNLESS loop.last %]
+ [%- NEXT UNLESS p.visible %]
+ [%- IF p.active %]<a href="[% base_url _ "&page=" _ p.page %]">[% p.page %]</a> [% ELSE %]<b>[% p.page %]</b> [%- END %]
[%- END %]
-[%- IF pages.cur < pages.max %] <a href='[% base_url _ "&page=" _ (pages.cur + 1) %]'>»</a>[%- END %]
+[%- IF pages.cur < pages.max %]<a href='[% base_url _ "&page=" _ (pages.cur + 1) %]'>»</a>[% ELSE %]<b>»</b>[%- END %]
[%- END %]