intro wiki download guestbook contact

Page

Gut, als nächstes kommt die Page an die Reihe. Das Anzeigen von einem Eintrag ist ja schon mal ganz schön, aber schließlich wollen wir ja auch neue Artikel anlegen. Dazu brauchen wir eine create Action in der Root Page. Diese definieren wir jetzt einmal:


sub create :Action {
   my $self = shift;

   response->write('in create action');
}

So wenn wir jetzt die Url http://localhost/wiki/create aufrufen sollte jetzt in create action im Browser erscheinen.

Templates

Desweitern brauchen wir ein Template, welches bei der create Action angezeigt wird. In WebTek werden s.g. Macros in Templates verwendet. Diese sind für den dynamischen Teil einer HTML Seite verantwortlich. Ein Macro sieht z.b. wie folgt aus:


<% link href="<% href %>" %>

Dieses Macro rendert beispielsweise den Link auf die aktuelle Page (=Seite). Das


<% href %>

Macro liefert uns die Url auf die aktuelle Seite, und das


<% link %>

Macro macht daraus einen Link. Ok, aber jetzt wollen wir mal das Template anlegen.

Dazu erstellen wir eine Datei in /WebTek/app/Wiki/templates/Root namens create.tpl mit folgendem Inhalt:


<h4>Neuen Artikel erstellen</h4>
<% form %>
   titel:<br />
   <% input name="title" %><br />
   text:<br />
   <% textarea with="100%" cols="70" rows="20" name="text" %><br />
   <% input type="submit" name="cancel" value="Abbrechen" %>
   <% input type="submit" name="create" value="Speichern" %>
<% form_end %>

Was passiert hier? Gut, zuerst steht einmal ein Feld für den Artikel Titel, und dann ein Textfeld für den Text. Darunter sind dann zwei Knöpfe. einmal Abbrechen und daneben Speichern. Damit dieses Template auch angezeigt wird, ändern wir die create action wie folgt:


sub create :Action { }

Dass jetzt in der create Action nichts mehr definiert ist, ist gut so, denn es wird ja auch noch nichts gemacht. Dass das create.tpl angezeigt wird, passiert automatisch, solange in der Action kein response->write (Siehe in der Referenz) gemacht wird.
Wenn wir jetzt auf die Url http://localhost/wiki/create gehen, sollten wir diese Seite mal sehen können, aber es passiert noch nix, wenn wir auf Speichern klicken. Damit hier was passiert, müssen wir in der create Action noch was einbauen:


sub create :Action {
   my $self = shift;

   if (request->is_post) {
      #... ein neuen Artikel erstellen und in der Datenbank speichern
      my $article = Wiki::Model::Article->new(request->params);
      $article->create_time(date('now'));
      $article->modify_time(date('now'));
      $article->save;

      #... dem Benutzer eine Nachricht anzeigen, dass der Artikel angelgt wurde
      response->message('Artikel erstellt');
      response->redirect($self->href);
   }
}

Was passiert hier:
Gut, als erstes fragen wir mal mit request->is_post nach, ob ein formular-submit gemacht wurde. Wenn ja, dann erzeugen wir einen neuen leeren Artikel und befüllen diesen mit den Informationen aus unserem Formular. Danach speichern wir den Artikel, setzten eine Nachricht, daß der Artikel erstellt worden ist, und machen ein Redirect auf $self->href (da wir uns in der Root Page befinden, liefert die Funktion den wert /wiki).
Es ist hier anzumerken, dass kein weiterer code nach einem response->redirect ausgeführt wird (sprich es wird eine Exception geworfen, der den request an dieser stelle abbricht).

Messages

Wenn wir jetzt versuchen einen ungültigen Artikel zu erzeugen, sprich wenn wir ohne etwas auszufüllen auf den Speichern Knopf drücken, dann kommen wir wieder auf die create.tpl Seite, allerdings mit zwei komischen wörtern oben in der Seite.


Wiki.Model.Article.text.empty
Wiki.Model.Article.title.empty

Diese zwei Wörter sind Schlüssel (=keys) für die Fehlermeldungen. Um hier aussagekräftige Fehlermeldungen anzuzeigen, brauchen wir ein message file. Dazu erstellen wir die Datei /WebTek/app/Wiki/messages/de.wiki.properties, und fügen folgendes ein:


Wiki.Model.Article.text.empty = Der Text darf nicht leer sein
Wiki.Model.Article.title.empty = Der Titel darf nicht leer sein

Wenn wir jetzt nochmal das leere Formular abschicken, dann sollte, wenn unsere Browser Sprache auf de (= Deutsch) gesetzt ist, folgendes sichtbar sein:


Der Titel darf nicht leer sein
Der Text darf nicht leer sein

Messages Dateien müssen übrigens, genauso wie Templates in UTF8 abgespeichert werden!
Weiters ist darauf zu achten, dass der Browser auf Deutsch eingestellt ist, da sonnt die englischen Messages angezeigt werden (und die gibt es ja noch gar nicht)

zurück weiter