intro wiki download guestbook contact

Benutzerverwaltung

So, jetzt kommen wir zur Benutzerliste. Diese soll uns eine Liste mit allen Benutzern darstellen. Und desweiteren könne wir hier auch neue Benutzer anlegen. Gut, also erstellen wir mal die Page mit:


./webtek Page UserList

Jetzt brauchen wir in der Page einen Konstruktor, eine create Action und ein users Macro. Das sieht dann wie folgt aus.


package Wiki::Page::UserList;
 
use strict;
use WebTek::Globals;
 
use WebTek::Parent qw( Wiki::Page::Root );

# ---------------------------------------------------------------------------
# constructors
# ---------------------------------------------------------------------------
 
sub new_for_userlist :Path(users) {
   my $class = shift;
   my $path = shift;    # string with path
   
   my $self = $class->new;
   $self->path($path);
   return $self;
}

# ---------------------------------------------------------------------------
# actions
# ---------------------------------------------------------------------------

sub create :Action {
   my $self = shift;
   
   if (request->is_post) {
      my $nickname = request->param('nickname');
      #... wir überprüfen ob der Benutzer mit dem Nickname schon existiert
      if ($nickname and Wiki::Model::User->find_one('nickname' => $nickname)) {
         response->message("Der Nickname ist schon vergeben");
         return;
      }
      #... wir erstellen den Benutzer
      my $user = Wiki::Model::User->new;
      $user->nickname($nickname);
      $user->password(request->param('password'));
      $user->create_time(date('now'));
      $user->modify_time(date('now'));
      $user->save;
      response->message("Benutzer angelegt");
      session->user($user);
      response->redirect($self->href);
   }
}

# ---------------------------------------------------------------------------
# macros
# ---------------------------------------------------------------------------

sub users :Macro {
   my ($self, %params) = @_;
   
   #... hier bekommen wir alle Benutzer aus der Datenbank
   my $users = Wiki::Model::User->find;
   #... und hier erstellen wir die Liste aller Benutzer.
   #... HINWEIS: jedes print in einem Macro schreibt automatisch ins Template,
   #...    aber vorsicht, da Perl automatisch den letzten SCALAR einer Funktion
   #...    retourniert, und der ebenfalls angezeigt werden würde,
   #...    dürfen wir hier das return "" nicht vergessen.
   foreach my $user (@$users) {
      print "<li>" . $user->nickname . "</li>\n";
   }
   return "";
}

1;

so, jetzt noch das index.tpl für die UserList Seite:


<h4>Benutzer:</h4>
 
<% users prefix="<ul>" suffix="</ul>" %>

<hr />
<% link
   if="<% check_access action="create" %>"
   href="<% href action="create" %>"
   display="erstellen"
   prefix="einen neuen Benutzer "
%>

Anzumerken ist noch, daß es keine schöne Art ist, Fehlermeldungen direkt im Code zu definieren. Normalerweise macht man dass über die Message- Files, sprich die Zeile


response->message("Der Nickname ist schon vergeben");

wird ersetzt durch


response->message($self->message('key' => 'user.exists'));

und er key user.exists wird dann im jeweiligen Message- File definiert.

zurück weiter