]> Frank Brehm's Git Trees - books.git/commitdiff
Mit Buchserien angefangen
authorFrank Brehm <frank@brehm-online.com>
Tue, 3 Nov 2009 23:46:26 +0000 (23:46 +0000)
committerFrank Brehm <frank@brehm-online.com>
Tue, 3 Nov 2009 23:46:26 +0000 (23:46 +0000)
lib/FrBr/Books/Controller/Serie.pm
lib/FrBr/Books/Util/Serie.pm
root/src/serie/list.tt2 [new file with mode: 0644]
root/src/serie/styles.css
root/src/serie/view.css [new file with mode: 0644]
root/src/serie/view.tt2 [new file with mode: 0644]

index 2ca87bc420c4f62ed95921a40eb192defd89e462..ce8df7a69974042aaf433aecfd9ad00355ffccf2 100644 (file)
@@ -59,6 +59,12 @@ sub index : Private {
     my $K = ( caller(0) )[3] . "(): ";
 
     $c->stash->{'template'} = 'serie/index.tt2';
+
+       $c->session->{'return_target_serie_save'} = $c->web_path("/serie");
+
+       delete $c->session->{'from_serie_list'} if exists $c->session->{'from_serie_list'};
+    delete $c->session->{'serie_data_edit'} if exists $c->session->{'serie_data_edit'};
+
 }
 
 #-------------------------------------------------------
@@ -83,6 +89,82 @@ sub default : Private {
 
 #-------------------------------------------------------
 
+sub add_serienlist_menu : Private {
+
+    my ( $self, $c ) = @_;
+    my $K = ( caller(0) )[3] . "(): ";
+
+    push @{ $c->stash->{'menu_path'} }, {
+        'path' => $c->web_path("/serie/list"),
+        'name' => "Liste"
+    };
+
+}
+
+#-------------------------------------------------------
+
+=head2 list
+    
+Sucht alle Buchserien als Objekt zusammen und übergibt das serie/list.tt2 zur Darstellung.
+    
+=cut
+     
+sub list : Local {
+
+    my ($self, $c) = @_;
+    my $K = ( caller(0) )[3] . "(): ";
+    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+       $self->add_serienlist_menu($c);
+    delete $c->session->{'serie_data_edit'} if exists $c->session->{'serie_data_edit'};
+
+       my $page = $c->session->{'serie_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->{'serie_list_page'} = $page;
+    }
+
+    my ( $liste, $anzahl ) = get_serienliste( $c, 'get_books' => 1, 'page' => $page );
+    $c->log->debug( get_output_string( $K, "Erhaltene Liste der Buchserien: ", $liste ) ) if $c->stash->{'debug_level'} >= 2;
+    $c->stash->{'serien'} = $liste;
+
+    my $max_page = 1;
+    if ( $anzahl ) {
+        $max_page = int( $anzahl / $list_length ) + 1;
+        if ( ( $page - 1 ) * $list_length > $anzahl ) {
+            $page = $max_page;
+            $c->session->{'serie_list_page'} = $page;
+        }
+    }
+    else {
+        $page = 1;
+        $c->session->{'serie_list_page'} = 1;
+    }
+
+       my $nav = {
+               'cur'         => $page,
+               'first'       => 1,
+               'last'        => $max_page,
+               'prev'        => ( ( $page > 1 ) ? ( $page - 1 ) : 1 ),
+               'next'        => ( ( ( $page + 1 ) > $max_page ) ? $max_page : ( $page + 1 ) ),
+               'serien'     => $anzahl,
+               'serie_from' => ( $anzahl ? ( ( $page - 1 ) * $list_length ) + 1 : 0 ),
+               'serie_to'   => ( ( $page * $list_length ) > $anzahl ? $anzahl : ( $page * $list_length ) ),
+       };
+       $c->stash->{'nav'} = $nav;
+    $c->log->debug( get_output_string( $K, "Seitennavigation: ", $nav ) ) if $c->stash->{'debug_level'} >= 2;
+
+    $c->session->{'return_target_view'} = $c->web_path("/serie/list");
+       $c->session->{'return_target_serie_save'} = $c->web_path("/serie/list");
+       $c->session->{'from_serie_list'} = 1;
+    $c->stash->{'template'} = 'serie/list.tt2';
+
+}
+
+#-------------------------------------------------------
+
 =head2 form_new( )
 
 Erstellen einer neuen Buchserie.
index f9e452371478a3676e0c3941fff212d2d939c510..4db2f0c22fc774f383a9a1d84551b7173c0c9656 100644 (file)
@@ -37,7 +37,7 @@ our @EXPORT_OK;
 
 =head1 NAME
 
-FrBr::Books::Util::Author - Modul fuer Funktionen rund um Buchserien
+FrBr::Books::Util::Serie - Modul fuer Funktionen rund um Buchserien
 
 =head1 METHODS
 
@@ -51,13 +51,67 @@ Sammelt alle Buchserien zusammen.
 
 Folgende benannte Parameter koennen ueber $params uebergeben werden:
 
-Rueckgabe: Eine Array-Ref von Hash-Refs mit allen verlagen, die den uebergebenen Suchkriterien entsprechen:
+=over 4
+
+=item B<get_books>
+
+Boolscher Parameter, der aussagt, dass auch die Buecher der Buchserie mit zuammengesammelt werden sollen.
+
+=item I<serien_id>: Die ID einer konkreten Buchserie
+
+=item B<page>
+
+Integer: Zeigt an, welche Seite von Verlagen dargestellt werden soll.
+
+Wenn nicht angegeben, werden alle Verlage zurückgegeben.
+
+=back
+
+Rueckgabe: Eine Array-Ref von Hash-Refs mit allen Buchserien, die den uebergebenen Suchkriterien entsprechen:
+Rueckgabe: Eine Array-Ref von Hash-Refs mit allen Buchserien, die den uebergebenen Suchkriterien entsprechen, sowie im Listenkontext die Anzahl der Buchserien, die den uebergebenen Suchkriterien entsprechen.
+
+Die zurueckgegebene Array-Ref hat folgenden Aufbau:
 
   $res = [
-    { 'id'             => 1,
-      'name'           => 'Perry Rhodan',
-      'descr'          => 'Abenteuer des Weltraumspezis',
-      'anzahl_buecher' => 60,
+    {
+        'id'                   => 1,
+        'name'                 => 'Perry Rhodan',
+        'descr'                        => 'Abenteuer des Weltraumspezis',
+        'count_books'       => 60,
+        'books'             => [
+                 {
+                       'id'                 => 2,
+            'serien_ord_num'     => 60,
+                       'title'              => 'Perry Rhodan - Die Cynos',
+                       'title_original'     => undef,
+                       'untertitel'         => undef,
+                       'bindungsart_id'     => 1,
+                       'bindungsart'        => 'Hartcover',
+                       'orts_id'            => 4,
+                       'isbn'               => undef,
+            'verlags_id'         => 2,
+            'verlags_name'       => 'Bertelsmann',
+                       'buch_nr'            => '0820 4',
+                       'ausgabejahr'        => '1997',
+                       'druckjahr'          => '2007',
+                       'seiten'             => 402,
+                       'preis'              => 18,
+                       'waehrungs_id'       => 1,
+                       'waehrungs_kuerzel'  => '€',
+                       'waehrungs_name'     => 'Euro',
+                       'umrechnung_in_euro' => 1,
+                       'ortsname'           => 'Dachboden',
+                       'ort_beschreibung'   => '',
+                       'ort_ist_statisch'   => 'n',
+                       'autoren'            => [ 'Verschiedene Autoren' ];
+                       'autor_ids'          => [ 2 ];
+          },
+                 {
+                       'id'    => 22,
+            ...
+                 },
+          ...
+               ],
     },
     { 'id'     => 2,
       ...
@@ -67,6 +121,8 @@ Rueckgabe: Eine Array-Ref von Hash-Refs mit allen verlagen, die den uebergebenen
 
 Die Liste ist nach den Serien-Namen alphabetisch sortiert.
 
+Im Listenkontext wird als zweiter Rückgabewert die Gesamtzahl aller Buchserien zurueckgegeben.
+
 =cut
 
 sub get_serienliste {
@@ -86,48 +142,194 @@ sub get_serienliste {
     $c->log->debug(  get_output_string( $K, "Uebergebene Parameter: ", $params ) ) if $c->stash->{'debug_level'} >= 2;
 
     my $list = [];
+       my $anzahl_serien = 0;
+
+       my $page = to_int( $params->{'page'} ) ? to_int( $params->{'page'} ) : undef;
+       my $rows = undef;
+       $rows = $c->stash->{'list_length'} || 20 if defined $page;
 
     my $search_params = undef;
+       if ( $params->{'serien_id'} ) {
+               $search_params = {
+                       'me.id' => $params->{'serien_id'},
+               };
+       }
+
+       $anzahl_serien = $c->model('Schema::Serien')->count( $search_params );
+    $c->log->debug(  get_output_string( $K, "Anzahl gefundene Serien: ", $anzahl_serien ) ) if $c->stash->{'debug_level'} >= 2;
 
     my $other_params = {};
     $other_params->{'order_by'} = [ 'serien_name' ];
     $other_params->{'select'} = [
-        'id',
-        'serien_name',
-        'descr',
+        'me.id',
+        'me.serien_name',
+        'me.descr',
+               { 'count' => 'buch_serie.id' }
     ];
     $other_params->{'as'} = [
         'id',
         'serien_name',
         'descr',
+               'count_books',
     ];
+       $other_params->{'join'} = [ 'buch_serie'];
+       $other_params->{'group_by'} = [ 'id' ];
 
-    my %SidMap;
+       if ( $page ) {
+               $other_params->{'rows'} = $rows;
+               $other_params->{'page'} = $page;
+       }
  
-    my $i = 0;
     for my $serie_rs ( $c->model('Schema::Serien')->search( $search_params, $other_params )->all() ) {
         my $serie = {};
         $serie->{'id'}    = $serie_rs->id();
         $serie->{'name'}  = $serie_rs->serien_name();
         $serie->{'descr'} = $serie_rs->descr();
-        $serie->{'anzahl_buecher'} = 0;
+        $serie->{'count_books'} = $serie_rs->get_column('count_books');
         push @$list, $serie;
-        $SidMap{$serie->{'id'}} = $i;
-        $i++;
     }
 
-    $search_params = undef;
-    $other_params = {};
-    $other_params->{'select'} = [ 'serien_id', { 'count' => 'buch_id' } ];
-    $other_params->{'as'} = [ 'serien_id', 'anzahl_buecher' ];
-    $other_params->{'group_by'} = [ 'serien_id', ];
-    for my $rs ( $c->model('Schema::Buch2serie')->search( $search_params, $other_params )->all() ) {
-       my $sid = $rs->serien_id();
-       my $j = $SidMap{$sid};
-       $list->[$j]{'anzahl_buecher'} = $rs->get_column('anzahl_buecher');
+    return ( wantarray ? ( $list, 0 ) : $list ) unless scalar @$list;
+    return ( wantarray ? ( $list, $anzahl_serien ) : $list ) unless $params->{'get_books'};
+
+    for my $serie ( @$list ) {
+
+        $serie->{'books'} = [];
+
+        my $sid = $serie->{'id'};
+
+        $search_params = {
+            'buch_serie.serien_id' => $sid,
+        };
+
+        $other_params = {};
+        $other_params->{'join'} = [ 'waehrung', 'ort', 'bindungsart', 'buch_serie', 'verlag', ];
+
+        $other_params->{'order_by'} = [ 'buch_serie.ord_num', 'me.title', ];
+
+               $other_params->{'select'} = [
+                       'me.id',
+            'buch_serie.ord_num',
+                       'me.title',
+                       'me.title_original',
+                       'me.untertitel',
+                       'me.bindungsart_id',
+                       'bindungsart.art_name',
+                       'me.orts_id',
+                       'me.isbn',
+            'me.verlags_id',
+            'verlag.name_short',
+                       'me.buch_nr',
+                       'me.ausgabejahr',
+                       'me.druckjahr',
+                       'me.seiten',
+                       'me.preis',
+                       'me.waehrungs_id',
+                       'waehrung.waehrungs_kuerzel',
+                       'waehrung.waehrungs_name',
+                       'waehrung.umrechnung_in_euro',
+                       'ort.name',
+                       'ort.descr',
+                       'ort.statisch',
+               ];
+
+               $other_params->{'as'} = [
+                       'id',
+            'serien_ord_num',
+                       'title',
+                       'title_original',
+                       'untertitel',
+                       'bindungsart_id',
+                       'bindungsart',
+                       'orts_id',
+                       'isbn',
+            'verlags_id',
+            'verlagsname',
+                       'buch_nr',
+                       'ausgabejahr',
+                       'druckjahr',
+                       'seiten',
+                       'preis',
+                       'waehrungs_id',
+                       'waehrungs_kuerzel',
+                       'waehrungs_name',
+                       'umrechnung_in_euro',
+                       'ortsname',
+                       'ort_beschreibung',
+                       'ort_ist_statisch',
+               ];
+
+               for my $book ( $c->model('Schema::Buecher')->search( $search_params, $other_params )->all() ) {
+                       my $buch = {};
+                       $buch->{'id'}                 = $book->id();
+                       $buch->{'serien_ord_num'}     = $book->get_column('serien_ord_num');
+                       $buch->{'title'}              = $book->title();
+                       $buch->{'title_original'}     = $book->title_original();
+                       $buch->{'untertitel'}         = $book->untertitel();
+                       $buch->{'bindungsart_id'}     = $book->bindungsart_id();
+                       $buch->{'bindungsart'}        = $book->get_column('bindungsart');
+                       $buch->{'orts_id'}            = $book->orts_id();
+                       $buch->{'isbn'}               = $book->isbn();
+            $buch->{'verlags_id'}         = $book->verlags_id();
+            $buch->{'verlags_name'}       = $book->get_column('verlagsname');
+                       $buch->{'buch_nr'}            = $book->buch_nr();
+                       $buch->{'ausgabejahr'}        = $book->ausgabejahr();
+                       $buch->{'druckjahr'}          = $book->druckjahr();
+                       $buch->{'seiten'}             = $book->seiten();
+                       $buch->{'preis'}              = $book->preis();
+                       $buch->{'waehrungs_id'}       = $book->waehrungs_id();
+                       $buch->{'waehrungs_kuerzel'}  = $book->get_column('waehrungs_kuerzel');
+                       $buch->{'waehrungs_name'}     = $book->get_column('waehrungs_name');
+                       $buch->{'umrechnung_in_euro'} = $book->get_column('umrechnung_in_euro');
+                       $buch->{'ortsname'}           = $book->get_column('ortsname');
+                       $buch->{'ort_beschreibung'}   = $book->get_column('ort_beschreibung');
+                       $buch->{'ort_ist_statisch'}   = $book->get_column('ort_ist_statisch');
+                       $buch->{'autoren'}            = [];
+                       $buch->{'autor_ids'}          = [];
+
+                       my $a_search_params = {};
+                       $a_search_params->{'buch_id'} = $buch->{'id'};
+                       $other_params = {};
+                       $other_params->{'order_by'} = [ 'ord_num' ];
+                       $other_params->{'join'}     = [ 'autor' ];
+                       $other_params->{'select'} = [
+                               'me.buch_id',
+                               'autor.id',
+                               'autor.titel',
+                               'autor.vorname',
+                               'autor.mittelname',
+                               'autor.nachname',
+                               'autor.name_suffix',
+                       ];
+                       $other_params->{'as'} = [
+                               'buch_id',
+                               'autor_id',
+                               'titel',
+                               'vorname',
+                               'mittelname',
+                               'nachname',
+                               'name_suffix',
+                       ];
+                       for my $ref ( $c->model('Schema::Autor2buch')->search( $a_search_params, $other_params )->all() ) {
+                               my $aid = $ref->get_column('autor_id');
+                               my @N;
+                               push @N, $ref->get_column('titel') if $ref->get_column('titel');
+                               push @N, $ref->get_column('vorname') if $ref->get_column('vorname');
+                               push @N, $ref->get_column('mittelname') if $ref->get_column('mittelname');
+                               push @N, $ref->get_column('nachname');
+                               push @N, $ref->get_column('name_suffix') if $ref->get_column('name_suffix');
+                               my $autor = join( " ", @N );
+                               push @{ $buch->{'autoren'} },   $autor;
+                               push @{ $buch->{'autor_ids'} }, $aid;
+                       }
+
+                       push @{ $serie->{'books'} }, $buch;
+
+               }
     }
 
-    return $list;
+    return ( wantarray ? ( $list, $anzahl_serien ) : $list );
+
 }
 
 #-----------------------------------------------------------------------------------
diff --git a/root/src/serie/list.tt2 b/root/src/serie/list.tt2
new file mode 100644 (file)
index 0000000..6a29365
--- /dev/null
@@ -0,0 +1,63 @@
+<!-- [%#
+  ** Template fuer Buchserienliste
+  **
+  ** vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+  **
+  ** $Id$
+  ** $URL$
+  ** -%]
+
+[%- BLOCK book_entry -%]
+[% link_target = Catalyst.web_path( '/books/view', { 'return_target_form' => self_url, view_book_id => book.id, } ) -%]
+<a href="[% link_target %]">[% book.title | html %]</a>[% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %]
+[%- END -%]
+
+  Buchserienliste
+
+-->
+
+[% tab_colspan = 4 %][% IF Catalyst.user_exists %][% tab_colspan = 6 %][% END -%]
+
+[% META title = 'Liste der Buchserien' -%]
+
+[% BLOCK navrow %]
+  <tr>
+    <td class="nav" colspan="[% tab_colspan %]"><table cellspacing="0" class="nav" width="100%">
+          <tr>
+              <td width="33%" style="text-align: left;"><b>[% IF nav.cur != 1 %]<a href="[% self_url %]?page=1" title="Erste Seite">&lt;&lt;</a>[% ELSE %]&lt;&lt;[% END %]&nbsp;&nbsp;[% IF nav.cur != nav.prev %]<a href="[% self_url %]?page=[% nav.prev %]" title="Vorherige Seite">&lt;</a>[% ELSE %]&lt;[% END %]</b></td>
+              <td width="33%" style="text-align: center;">Buchserie [% nav.serie_from %] bis [% nav.serie_to %] von [% nav.serien %]</td>
+              <td width="33%" style="text-align: right;"><b>[% IF nav.cur != nav.next %]<a href="[% self_url %]?page=[% nav.next %]" title="Nächste Seite">&gt;</a>[% ELSE %]&gt;[% END %]&nbsp;&nbsp;[% IF nav.cur != nav.last %]<a href="[% self_url %]?page=[% nav.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">
+<tr><th>Liste der Buchserien</th> </tr>
+[% IF Catalyst.user_exists %]<tr><td class="action"><a href="[% path('/serie/new') %]">Neue Buchserie ...</a></td></tr>[% END %]
+<tr><td><table class="serienliste">
+  <tr>
+    <th>Name der Buchserie</th>
+    <th>zusätzliche Angaben</th>
+    <th>Bücher</th>
+    <th></th>
+    [% IF Catalyst.user_exists %]<th></th>
+    <th></th>[% END %]
+  </tr>[% PROCESS navrow %]
+[% rowstyle = 'even' %][%- FOREACH serie IN serien -%][% serien_id = serie.id %]
+  <tr>
+    <td class="[% rowstyle %]">[% serie.name %]</td>
+    <td class="[% rowstyle %]">[% serie.descr %]</td>
+    <td class="[% rowstyle %]"><ul class="serienliste">[% IF serie.books and serie.books.size > 0 %][% FOREACH b IN serie.books %]
+            <li>[% PROCESS book_entry book=b %]</li>[% END %][% ELSE %]<li><i>keine</i></li>[% END %]
+        </ul></td>
+    <td class="button [% rowstyle %]"><a href="[% path('/serie/view') %]?view_serien_id=[% serie.id %]">Ansehen</a></td>
+    [% IF Catalyst.user_exists %]<td class="button [% rowstyle %]"><a href="[% path('/serie/edit') %]?edit_serien_id=[% serie.id %]">Ändern</a></td>
+    <td class="button [% rowstyle %]">[% IF serie.books and serie.books.size > 0 %]Löschen[% ELSE %]<a href="[% path('/serie/delete') %]?delete_serie_id=[% serie.id %]">Löschen</a>[% END %]</td>[% END %]
+  </tr>
+[% IF rowstyle == 'even' %][% rowstyle = 'odd'%][% ELSE %][% rowstyle = 'even' %][% END %][% END -%]
+[% PROCESS navrow %]</table></td></tr></table>
+</div>
+<br />
index e2133b436c6c2a4fd06208128107f8a525ba9d6f..932d8d2d186ac6de84efc59bcd63b805756b7f95 100644 (file)
@@ -7,4 +7,83 @@
 -%]
  Stylesheets Buchserien */
 
+DIV.center {
+  margin:               auto;
+  text-align:           center;
+  width:                auto;
+}
+
+TABLE.wrapper {
+  border-spacing:       0;
+  margin:               auto;
+}
+
+TABLE.wrapper TH {
+  text-align:           center;
+  font-size:            1.2em;
+}
+
+TABLE.wrapper TD {
+  text-align:           left;
+}
+
+TABLE.wrapper TD.action {
+  font-weight:          bolder;
+  padding-top:          1em;
+  padding-bottom:       1em;
+}
+
+TABLE.serienliste {
+  border-width:                2px;
+  border-style:                solid;
+  border-top-color:     [% site.col.tab_rahmen_hell %];
+  border-left-color:    [% site.col.tab_rahmen_hell %];
+  border-right-color:  [% site.col.tab_rahmen_dkl %];
+  border-bottom-color:  [% site.col.tab_rahmen_dkl %];  
+  border-collapse:     separate;
+  border-spacing:      0;
+}
+
+TABLE.serienliste TH {
+  vertical-align:      top;
+  text-align:          left; 
+  font-size:            1em;
+  padding:             2px;
+  border-width:                1px;
+  border-style:                solid;
+  border-top-color:     [% site.col.tab_rahmen_dkl %];
+  border-left-color:    [% site.col.tab_rahmen_dkl %];
+  border-right-color:  [% site.col.tab_rahmen_hell %];
+  border-bottom-color:  [% site.col.tab_rahmen_hell %];  
+  background-color:    [% site.col.list_head %];
+}
+
+TABLE.serienliste TD {
+  vertical-align:      top;
+  font-size:            1em;
+  padding:             2px;
+  border-width:                1px;
+  border-style:                solid;
+  border-top-color:     [% site.col.tab_rahmen_dkl %];
+  border-left-color:    [% site.col.tab_rahmen_dkl %];
+  border-right-color:  [% site.col.tab_rahmen_hell %];
+  border-bottom-color:  [% site.col.tab_rahmen_hell %];  
+  background-color:    [% site.col.list_row_bold %];
+}
+
+TABLE.serienliste TD.odd {
+  background-color:    [% site.col.list_row %];
+}
+
+TABLE.serienliste UL {
+  margin:      0;
+}
+
+TABLE.serienliste TD.button {
+  font-weight:          bolder;
+  text-align:           center;
+  padding-left:         1em;
+  padding-right:        1em;
+}
+
 
diff --git a/root/src/serie/view.css b/root/src/serie/view.css
new file mode 100644 (file)
index 0000000..7ba7f81
--- /dev/null
@@ -0,0 +1,13 @@
+/* [%#
+   # Template fuer Stylesheets Autorenazeige
+   #
+   # vim: noai : ts=4 fenc=utf-8 filetype=css 
+   #
+   # $Id$
+   # $URL$
+   #
+-%]
+  Stylesheets Autorenazeige */
+
+[% PROCESS ftable.css %]
+
diff --git a/root/src/serie/view.tt2 b/root/src/serie/view.tt2
new file mode 100644 (file)
index 0000000..d1f2dcb
--- /dev/null
@@ -0,0 +1,58 @@
+<!-- [%#
+
+    Template fuer Buchserienzeige
+
+    vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+
+    $Id$
+    $URL$
+
+    Übergebene Struktur in [serien]:
+
+    $serien = [
+    };
+
+-%]
+[%- BLOCK book_entry -%]
+[% link_target = Catalyst.web_path( '/books/view', { 'return_target_form' => self_url, view_book_id => book.id, } ) -%]
+<a href="[% link_target %]">[% book.title | html %]</a>[% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %]
+[%- END -%]
+
+Anzeige Buchserien -->
+
+<table class="ftable" cellspacing="0">
+  <tr>
+    <th colspan="2" class="title">Autor '[%- autor.name | html -%]'</th>
+  </tr><tr>
+    <td colspan="2" class="empty"></td>
+  </tr><tr>
+    <th>Titel des Autors :</th>
+    <td>[% autor.title | html %]</td>
+  </tr><tr>
+    <th>Vorname:</th>
+    <td>[% autor.vorname | html %]</td>
+  </tr><tr>
+    <th>Zweiter Vorname (oder Vatersname o.ä.):</th>
+    <td>[% autor.mittelname | html %]</td>
+  </tr><tr>
+    <th>Nachname:</th>
+    <td>[% autor.nachname | html %]</td>
+  </tr><tr>
+    <th>Namenssuffix (Jr. o.ä.):</th>
+    <td>[% autor.name_suffix | html %]</td>
+  </tr><tr>
+    <th>Zusätzliche Angaben:</th>
+    <td>[% autor.descr | html %]</td>
+  </tr><tr>
+    <th>Über den Autor:</th>
+    <td>[% ForumCode.forumcode( autor.about ) %]</td>
+  </tr><tr>
+    <th>Bücher:</th>
+    <td>[% IF autor.books.size > 0 %][% IF autor.books.size > 1 %]<ul>[% FOR buch IN autor.books %]<li>[% PROCESS book_entry b=buch %]</li>
+           [% END %]</ul>[% ELSE %][% PROCESS book_entry b=autor.books.0 %][% END %][% ELSE %]<i>keine</i>[% END %]</td>
+</table>
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'Zurück' %]</a></h2>
+</div>
+