]> Frank Brehm's Git Trees - books.git/commitdiff
Seitenweise Darstellung der Bücherliste
authorFrank Brehm <frank@brehm-online.com>
Thu, 11 Dec 2008 18:56:36 +0000 (18:56 +0000)
committerFrank Brehm <frank@brehm-online.com>
Thu, 11 Dec 2008 18:56:36 +0000 (18:56 +0000)
frbr_books.yml
lib/FrBr/Books.pm
lib/FrBr/Books/Controller/Books.pm
lib/FrBr/Books/Util/Book.pm
root/src/books/list.tt2

index 311bfa4b63ebf17be2c9427fe22843265217c723..f1c2a71100db5dbbbb162c903e0f290749234b4c 100644 (file)
@@ -11,6 +11,9 @@ log_level:      info
 # Soll die Log-Ausgabe farbig erfolgen ?
 colored_log:    0
 #
+# Standard-Listenlaenge
+default_list_length:    10
+#
 # Sitzungsparameter
 session:
    expires:     7200
index 5be44ca8c46efcaaa1b3e6ee3d7a8db91f03f89a..cf2633682e3f8b1fafc27caf0f429e4c46bdc0c2 100644 (file)
@@ -76,7 +76,7 @@ __PACKAGE__->setup;
 sub auto : Private {
 
     my ( $self, $c ) = @_;
-    my $K = __PACKAGE__ . "::auto(): ";
+    my $K = ( caller(0) )[3] . "(): ";
 
     my $self_url = $c->request->base . $c->request->path;
     $self_url =~ s#^https?://[^/]+/#/#;
@@ -152,6 +152,10 @@ sub auto : Private {
 
     $c->log->debug( $K . "Aktuelle Script-URL: '" . $c->stash->{'self_url'} . "'." ) if $c->stash->{'debug_level'} >= 2;
 
+    # Listenlaenge festlegen
+    $c->stash->{'list_length'} = $c->session->{'list_length'} || $c->config->{'default_list_length'} || 10;
+    
+
     1;
 
 } ## end sub auto :
@@ -182,6 +186,31 @@ Frank Brehm
 This library is free software, you can redistribute it and/or modify
 it under the same terms as Perl itself.
 
+=head1 INTERNA
+
+=head2 Sitzungs-Variablen:
+
+=over 4
+
+=item I<last_run>: Zeitstempel des letzten Durchlaufs
+
+=item I<last_path>: URL des letzten Requests
+
+=item I<cur_path>: URL des aktuellen Requests
+
+=item I<request>: Hash-Ref mit ein paar Angaben zum aktuellen Request:
+
+  'request' => {
+    'client' => '192.166.201.59',
+    'host' => 'sarah',
+    'uagent' => 'Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.4) Gecko/2008111819 Gentoo Firefox/3.0.4',
+    'uri' => bless( do{\(my $o = 'http://sarah.brehm-online.com:3000/books/list')}, 'URI::http' )
+  },
+
+=item I<list_length>: die aktuelle Listenlaenge
+
+=back
+
 =cut
 
 1;
index 50eee4c17314225a0dda829e670f2e15ec535ab2..cb320290b1997b87b95dd256b6d408f72a6c5eec 100644 (file)
@@ -132,7 +132,39 @@ sub list : Local {
 
     $self->add_booklist_menu($c);
 
-    my $buchliste = get_booklist( $c );
+    my $page = $c->session->{'book_list_page'} || 1;
+    my $list_length = $c->stash->{'list_length'} || 10;
+
+    if ( $c->request->params->{'page'} and to_int( $c->request->params->{'page'} ) ) {
+        $page = to_int( $c->request->params->{'page'} );
+        $c->session->{'book_list_page'} = $page;
+    }
+
+    my ( $buchliste, $anzahl ) = get_booklist( $c, { 'page' => $page }  );
+    my $max_page = 1;
+    if ( $anzahl ) {
+        $max_page = int( $anzahl / $list_length ) + 1;
+        if ( ( $page - 1 ) * $list_length > $anzahl ) {
+            $page = $max_page;
+            $c->session->{'book_list_page'} = $page;
+        }
+    }
+    else {
+        $page = 1;
+        $c->session->{'book_list_page'} = 1;
+    }
+
+    $c->stash->{'book_liste_page'} = {};
+    $c->stash->{'book_liste_page'}{'cur'}   = $page;
+    $c->stash->{'book_liste_page'}{'first'} = 1;
+    $c->stash->{'book_liste_page'}{'last'}  = $max_page;
+    $c->stash->{'book_liste_page'}{'prev'}  = ( $page > 1 ) ? ( $page - 1 ) : 1;
+    $c->stash->{'book_liste_page'}{'next'}  = ( ( $page + 1 ) > $max_page ) ? $max_page : ( $page + 1 );
+    $c->stash->{'book_liste_page'}{'books'} = $anzahl;
+    $c->stash->{'book_liste_page'}{'book_from'} = $anzahl ? ( ( $page - 1 ) * $list_length ) + 1 : 0;
+    $c->stash->{'book_liste_page'}{'book_to'}   = ( $page * $list_length ) > $anzahl ? $anzahl : ( $page * $list_length );
+    $c->log->debug( get_output_string( $K, "Seitennavigation: ", $c->stash->{'book_liste_page'} ) ) if $c->stash->{'debug_level'} >= 2;
+
     $c->log->debug( get_output_string( $K, "Erhaltene Buchliste: ", $buchliste ) ) if $c->stash->{'debug_level'} >= 2;
     $c->stash->{'books'} = $buchliste;
 
@@ -1005,6 +1037,32 @@ Frank Brehm
 This library is free software, you can redistribute it and/or modify
 it under the same terms as Perl itself.
 
+=head1 INTERNA
+
+=head2 Sitzungs-Variablen:
+
+=over 4
+
+=item I<book_data_edit>: die aktuellen daten des zu bearbeitenden Buches, bevor sie gespeichert werden
+
+=item I<delete_book_id>: die Id des zu loeschenden Buches
+
+=item I<list_length>: die aktuelle Listenlaenge
+
+=item I<return_target_autor_save>: URI fuer den Zurueck-Knopf auf der C<Erfolgreich gespeichert>-Seite
+
+=item I<return_target_del>: URI fuer den Zurueck-Knopf im Loeschen-Formular
+
+=item I<return_target_edit>: URI fuer den Zurueck-Knopf im Bearbeiten-Formular
+
+=item I<return_target_new>: URI fuer den Zurueck-Knopf im Neuen-Buch-Formular
+
+=item I<return_target_view>: URI fuer den Zurueck-Knopf im Betrachten-Formular
+
+=item I<from_book_list>: boolscher Flag, ob man aus der Buecherliste ins Formular kam oder aus dem Menue
+
+=back
+
 =cut
 
 #-------------------------------------------------------
index 13e250d203b1789d05639c252ba7c6dde89bd01d..cc979320c5e46308ada20f41036441ea439c43ca 100644 (file)
@@ -131,15 +131,28 @@ sub get_booklist {
 
     my $list = [];
     my $buchmap = {},
+    my $anzahl_buecher = 0;
+
+    # Suchparameter zusammensammeln
+    my $b_search_params = {};
 
-    my $b_search_params = undef;
     if ( $params->{'buch_id'} ) {
-        $b_search_params = { 'me.id' => $params->{'buch_id'} };
+        $b_search_params->{'me.id'} = $params->{'buch_id'};
     }
 
+    # Suchparameter auf undef setzen, falls es keine gibt.
+    $b_search_params = undef unless scalar keys %$b_search_params;
+
     my $other_params = {};
     $other_params->{'order_by'} = [ 'title' ];
     $other_params->{'join'}     = [ 'waehrung', 'verlag', 'ort', 'bindungsart' ];
+
+    $anzahl_buecher = $c->model('Schema::Buecher')->count( $b_search_params, $other_params );
+    $c->log->debug(  get_output_string( $K, "Anzahl gefundene Buecher: ", $anzahl_buecher ) ) if $c->stash->{'debug_level'} >= 2;
+
+    $other_params->{'rows'} = $c->stash->{'list_length'} || 10;
+    $other_params->{'page'} = $params->{'page'} || $c->stash->{'page'} || 1;
+
     $other_params->{'select'} = [
         'me.id',
         'me.title',
@@ -229,7 +242,7 @@ sub get_booklist {
         $i++;
     }
 
-    return $list unless scalar( @$list );
+    return ( wantarray ? ( $list, 0 ) : $list ) unless scalar( @$list );
 
     # Autoren zusammensammeln
     my $a_search_params = {};
@@ -328,7 +341,7 @@ sub get_booklist {
         push @{$buch->{'serien_ids'}}, $sid;
     }
 
-    return $list;
+    return ( wantarray ? ( $list, $anzahl_buecher ) : $list );
 }
 
 #-----------------------------------------------------------------------------------
index d57c315e61a1d111286845bb9f6ba5ddc6c36764..84a1cca0684674b67b28651b1de0033ca9ba6868 100644 (file)
@@ -9,6 +9,18 @@
 
 [% META title = 'Bücherliste' -%]
 
+[% BLOCK navrow %]
+  <tr>
+    <td class="nav" colspan="8"><table cellspacing="0" class="nav" width="100%">
+          <tr>
+              <td width="33%" style="text-align: left;"><b>[% IF book_liste_page.cur != 1 %]<a href="[% self_url %]?page=1" title="Erste Seite">&lt;&lt;</a>[% ELSE %]&lt;&lt;[% END %]&nbsp;&nbsp;[% IF book_liste_page.cur != book_liste_page.prev %]<a href="[% self_url %]?page=[% book_liste_page.prev %]" title="Vorherige Seite">&lt;</a>[% ELSE %]&lt;[% END %]</b></td>
+              <td width="33%" style="text-align: center;">Buch [% book_liste_page.book_from %] bis [% book_liste_page.book_to %] von [% book_liste_page.books %]</td>
+              <td width="33%" style="text-align: right;"><b>[% IF book_liste_page.cur != book_liste_page.next %]<a href="[% self_url %]?page=[% book_liste_page.next %]" title="Nächste Seite">&gt;</a>[% ELSE %]&gt;[% END %]&nbsp;&nbsp;[% IF book_liste_page.cur != book_liste_page.last %]<a href="[% self_url %]?page=[% book_liste_page.last %]" title="Letzte Seite">&gt;&gt;</a>[% ELSE %]&gt;&gt;[% END %]</b></td>
+          </tr>
+        </table></td>
+  </tr>
+[% END -%]
+
 <div class="center">
 
 <table class="wrapper" cellspacing="0">
@@ -24,7 +36,7 @@
     <th></th>
     <th></th>
     <th></th>
-  </tr>
+  </tr>[% PROCESS navrow %]
 [% rowstyle = 'even' %][%- FOREACH book IN books -%][% buch_id = book.id %]
   <tr>
     <td class="[% rowstyle %]">[% tt_authors = [ ]; tt_authors.push(autor) FOREACH autor = book.autoren %][% tt_authors.join(', ') %]</td>
@@ -37,6 +49,6 @@
     <td class="[% rowstyle %] button"><a href="[% path('/books/delete') %]?delete_book_id=[% book.id %]">Löschen</a></td>
   </tr>
 [% IF rowstyle == 'even' %][% rowstyle = 'odd'%][% ELSE %][% rowstyle = 'even' %][% END %][% END -%]
-</table></td></tr></table>
+[% PROCESS navrow %]</table></td></tr></table>
 </div>