Paginating Sanity:
authorSven Schöling <s.schoeling@linet-services.de>
Thu, 21 Jul 2011 14:04:17 +0000 (16:04 +0200)
committerSven Schöling <s.schoeling@linet-services.de>
Thu, 8 Dec 2011 10:42:15 +0000 (11:42 +0100)
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

SL/DB/Helper/Paginated.pm
templates/webpages/common/paginate.html

index a5a07d0..df5a6e3 100644 (file)
@@ -6,6 +6,8 @@ require Exporter;
 our @ISA    = qw(Exporter);
 our @EXPORT = qw(paginate);
 
+use List::MoreUtils qw(any);
+
 sub paginate {
   my ($self, %params) = @_;
   my $page = $params{page} || 1;
@@ -47,12 +49,21 @@ sub make_common_pages {
   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__
index 6611f77..3724f8e 100644 (file)
@@ -1,10 +1,8 @@
 [%- IF pages.max > 1 %]
-[%- IF pages.cur > 1 %]<a href='[% base_url _ "&page=" _ (pages.cur - 1) %]'>&laquo;</a> [%- END %]
+[%- IF pages.cur > 1 %]<a href='[% base_url _ "&page=" _ (pages.cur - 1) %]'>&laquo;</a> [% ELSE %]<b>&laquo;</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) %]'>&raquo;</a>[%- END %]
+[%- IF pages.cur < pages.max %]<a href='[% base_url _ "&page=" _ (pages.cur + 1) %]'>&raquo;</a>[% ELSE %]<b>&raquo;</b>[%- END %]
 [%- END %]