.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Jifty::Manual::Tutorial_de 3pm" .TH Jifty::Manual::Tutorial_de 3pm "2010-09-25" "perl v5.14.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Jifty::Manual::Tutorial_de \- Einfu\*:hrung in Jifty .SH "BESCHREIBUNG" .IX Header "BESCHREIBUNG" Dieses Tutorial sollte Ihnen alles Wichtige mit auf den Weg geben, um erfolgreich eine erste Applikation mit Jifty zu bauen. .SH "WIE?" .IX Header "WIE?" .SS "Anforderungen" .IX Subsection "Anforderungen" Hier steht, was Sie installiert haben sollten \*(-- wenigstens wenn wir es schreiben. .SS "Jifty installieren" .IX Subsection "Jifty installieren" Nicht wirklich eine gro\*8e Sache. Wir glauben stark an das \s-1DRY\s0 (Don't Repeat Yourself \*(-- Keine Wiederholungen) Prinzip. Das ist einer der gro\*8en Gru\*:nde, warum wir Perl und das \s-1CPAN\s0 lieben. Jifty benutzt viel Code aus dem \s-1CPAN\s0. Bei der letzten Za\*:hlung waren es wenigstens 60 Pakete. Die meisten Module sind auf vielen Plattformen einsetzbare nur in Perl geschriebene Module und sollten ohne Probleme funktionieren. .PP Wir haben einige Anstrengungen unternommen, damit Sie nicht Ihre Zeit damit verbringen mu\*:ssen, Abha\*:ngigkeiten aufzulo\*:sen, nur um Jifty zu installieren. Das Jifty Installationsprogramm stellt fest, welche Module Ihr System beno\*:tigt und la\*:dt bei Bedarf die erforderlichen Module nach. Also machen Sie sich keine Sorgen, Sie werden immer gefragt, bevor A\*:nderungen vorgenommen werden. .PP Auf den meisten Systemen wird Perl mit dem \s-1CPAN\s0 Modul ausgeliefert, womit die Jifty Installation einfach wird: .PP .Vb 2 \& # perl \-MCPAN \-e\*(Aqinstall Jifty\*(Aq # auf Unix\-a\*:hnlichen Systemen \& # perl \-MCPAN \-e"install Jifty" # auf Win32 Systemen .Ve .PP Falls Sie lieber eine \f(CW\*(C`.tar.gz\*(C'\fR Datei von Jifty herunterladen wollen, ko\*:nnen Sie diese wie folgt installieren: .PP .Vb 6 \& # tar xzvf jifty\-.tgz \& # cd jifty\- \& # perl Makefile.PL \& # make \& # make test \& # make install .Ve .PP Falls die Tests nicht erfolgreich verlaufen, wa\*:re eine Ru\*:ckmeldung an uns interessannt. Bitte melden Sie sich bei der Liste \&\f(CW\*(C`jifty\-devel@lists.jifty.org\*(C'\fR und melden den Fehler. (Oder sehen Sie nach unter \*(L"\s-1HILFE\s0\*(R" weiter unten wo beschrieben ist, wie Sie sich uns anschlie\*8en ko\*:nnen.) .SS "Erstellung eines Rumpfes" .IX Subsection "Erstellung eines Rumpfes" Wenn Sie Jifty erfolgreich installiert haben, ko\*:nnen Sie Ihre erste Applikation erstellen. .PP Jifty ist geplanterma\*8en Minimalistisch. Wenn Sie eine Applikation erstellen mo\*:chten, kopieren Sie einfach das \fIjifty\fR Kommandozeilenprogramm in das \fIbin/\fR Unterverzeichnis in Ihr Applikations-Verzeichnis. .PP \&\s-1OK\s0, es ist natu\*:rlich hilfreich, ein wenig strukturierter vorzugehen. Jifty wird mit Werkzeugen geliefert, die Ihnen helfen, die notwendigen Strukturen anzulegen. .PP Wechseln Sie in ein sicheres Verzeichnis, in dem Sie Ihre Applikation anlegen mo\*:chten (Jifty erstellt das notwendige Unterverzeichnis fu\*:r Sie). .PP .Vb 10 \& # jifty app \-\-name MyWeblog \& Can\*(Aqt guess application root from current path (/tmp) or bin path (/usr/bin) \& Creating new application MyWeblog \& Creating directory lib \& Creating directory lib/MyWeblog \& Creating directory bin \& Creating directory etc \& Creating directory doc \& Creating directory log \& Creating directory var \& Creating directory var/mason \& Creating directory share \& Creating directory share/po \& Creating directory share/web \& Creating directory share/web/templates \& Creating directory share/web/static \& Creating directory lib/MyWeblog/Model \& Creating directory lib/MyWeblog/Action \& Creating directory t \& Creating configuration file MyWeblog/etc/config.yml .Ve .PP Sehen wir uns die einzelnen Verzeichnisse genauer an. .IP "bin" 4 .IX Item "bin" Innerhalb des \fIbin/\fR Verzeichnisses liegt \fIjifty\fR, die Jifty Kommandozentrale. Einige der wichtigsten Befehle sind \f(CW\*(C`schema\*(C'\fR, welches ein Datenbank-Schema erstellt oder erneuert und \f(CW\*(C`server\*(C'\fR, womit ein funktionsfa\*:higer Webserver gestartet wird. Um die von \&\fIjifty\fR verstandenen Kommandos herauszufinden, tippen Sie: .Sp .Vb 1 \& jifty help .Ve .IP "etc" 4 .IX Item "etc" Konfigurationsdateien leben in \fIetc/\fR und Jifty wird vernu\*:nftige Standardwerte verwenden, sollte keine Konfigurationsdatei vorhanden sein oder beno\*:tigte Eintra\*:ge fehlen. .IP "doc" 4 .IX Item "doc" Leider erstellt Jifty keine magische Dokumentation, aber wenn Sie dokumentieren, dann bitte in das Verzeichnis \fIdoc/\fR. .IP "log" 4 .IX Item "log" Jifty setzt Log::Log4perl ein, um mitzuprotokollieren. Voreingestellt ist das Erstellen der Logs \&\fIserver.log\fR und \fIerror.log\fR in das \fIlog/\fR Verzeichnis. .IP "share/web/templates" 4 .IX Item "share/web/templates" Jifty nutzt HTML::Mason als sein prima\*:res Template System. Legen Sie die Templates Ihrer Appkikation in \fIshare/web/templates/\fR. Von Haus aus wird Jifty mit einer vordefinierten Applikation geliefert, die im Verzeichnis \fIshare/web/templates/\fR installiert wird. Diese vordefinierte Applikation ist ein bequemer Weg um eine einfache eigene Applikation schnell zum Laufen zu bringen, jedoch sind sicher Anpassungen notwendig, wenn Ihre Applikation komplexer wird. .Sp Sie ko\*:nnen schnell herausfinden, wo Jifty seine vordefinierten Templates ablegt: .Sp .Vb 1 \& perl \-MJifty::Util \-e \*(Aqprint Jifty::Util\->share_root\*(Aq .Ve .IP "share/web/static" 4 .IX Item "share/web/static" Einige einfache Dinge, die zu Ihrer Applikation geho\*:ren, brauchen nicht (oder \fIsollten nicht\fR) durch das Template-System laufen. .Sp Stecken Sie solche Dateien einfach in das \fIshare/web/static/\fR Verzeichnis und Jifty wird diese verwenden, wenn es nicht gleichzeitig ein Template mit identischen Namen gibt. .Sp Von Hause aus wird Jifty mit einigen \s-1CSS\s0 Stilen, JavaScript Bibliotheken und einem Pony geliefert. Sehen Sie einfach im Verzeichnis \fIshare/web/static\fR der Jifty Distribution nach oder dort wo Jifty seine Standard-Templates ablegt. .IP "lib/MyWeblog" 4 .IX Item "lib/MyWeblog" Eine na\*:here Beschreibung des Objekt Modells und der Verzeichnishierarchie finden Sie unter Jifty::Manual::ObjectModel .Sp Zum Bau einer funktionsfa\*:higen einfachen Applikation brauchen Sie sich nur Gedanken u\*:ber zwei Arten von Klassen, \fBModels\fR und \fBActions\fR zu machen. .IP "lib/MyWeblog/Model" 4 .IX Item "lib/MyWeblog/Model" Die wirkliche Basis Ihrer Applikation lebt in \&\f(CW\*(C`lib/\f(CBAppName\f(CW/Model\*(C'\fR. Alle Klassen hier definieren die Daten(bank)strukturen Ihrer Applikation und wie diese miteinander verbunden sind. Jifty benutzt diese Model-Klassen zum Erstellen oder Aktualisieren des Datenbank-Schemas, wenn dies notwendig sein sollte. .IP "lib/MyWeblog/Action" 4 .IX Item "lib/MyWeblog/Action" Als wir gesagt haben, da\*8 Sie sich nur u\*:ber \fBModels\fR und \fBActions\fR den Kopf zerbrechen mu\*:ssen, haben wir nicht die ganze Wahrheit gesagt. Jifty ku\*:mmert sich um grundlegende Datenbank Interaktionen (\f(CW\*(C`CREATE (Anlegen), READ (Lesen), UPDATE (Aktualisieren), DELETE (Lo\*:schen)\*(C'\fR). Entsprechend beno\*:tigte \fBActions\fR werden fu\*:r die jeweiligen \fBModels\fR automatisch erzeugt und ko\*:nnen jederzeit vera\*:ndert werden, sollte dies notwendig werden. .IP "t" 4 .IX Item "t" Jifty legt bereits Test-Routinen fu\*:r Ihre Applikation an, kann allerdings nicht die Tests fu\*:r Sie schreiben. (Es erstellt jedoch einfache Tests fu\*:r die Model-Klassen, die Sie anlegen.) .IP "var" 4 .IX Item "var" Jifty speichert Cache-Dateien hier, wa\*:hrend der Server la\*:uft. Normalerweise werden Sie hier nichts tun mu\*:ssen. .SS "Erstellung eines Datenmodells" .IX Subsection "Erstellung eines Datenmodells" Wie Sie sich aus der Tatsache, da\*8 diese Tutorial-Applikation \&\fBMyWeblog\fR hei\*8t, vorstellen ko\*:nnen, ist das hier vorgestellte Beispiel ein einfaches Weblog. Ku\*:nftige Tutorials werden Authentifizierung, Kommentare sowie \s-1RSS\s0 und Atom Feeds beschreiben. .PP \fIPosts\fR .IX Subsection "Posts" .PP Weblogs konzentrieren sich rund um Posts, daher ist es keine U\*:berraschung, da\*8 unser erstes Model, das wir erzeugen werden, ein \&\f(CW\*(C`Post\*(C'\fR ist. .PP .Vb 4 \& # cd MyWeblog \& # jifty model \-\-name Post \& Writing file /tmp/MyWeblog/t/00\-model\-Post.t \& Writing file /tmp/MyWeblog/lib/MyWeblog/Model/Post.pm .Ve .PP Gro\*8artig! Nun haben Sie ein \fBPost\fR Model (Nur, da\*8 es im Augenblick noch nichts modelliert). .PP O\*:ffnen Sie \fIlib/MyWeblog/Model/Post.pm\fR in Ihrem Lieblings-Editor. .PP Sie sollten etwas sehen wie: .PP .Vb 2 \& use strict; \& use warnings; \& \& package MyWeblog::Model::Post; \& use Jifty::DBI::Schema; \& \& use MyWeblog::Record schema { \& \& }; \& \& # Your model\-specific methods go here. \& \& 1; .Ve .PP Nun ist es an der Zeit, der Model Klasse etwas u\*:ber Posts zu erza\*:hlen. Fangen wir damit an, einem Post einen \f(CW\*(C`body\*(C'\fR (Rumpf) und einen \f(CW\*(C`title\*(C'\fR (Titel) zu geben. (In einem kommenden Tutorial wird die Applikation voll \*(L"Folksonomy\*(R"\-tauglich werden, was wir durch Anfu\*:gen einer \f(CW\*(C`category\*(C'\fR (Kategorie) und Erweitern der \f(CW\*(C`category\*(C'\fR zu einer \&\f(CW\*(C`tags\*(C'\fR (Indexierung, Etikett) Tabelle erreichen ko\*:nnten.) .PP Editieren Sie unter dieser Zeile: .PP .Vb 1 \& use MyWeblog::Record schema { .Ve .PP Fu\*:gen Sie diese Zeilen an: .PP .Vb 4 \& column title => \& type is \*(Aqtext\*(Aq, \& label is \*(AqTitle\*(Aq, \& default is \*(AqOhne Titel\*(Aq; \& \& column body => \& type is \*(Aqtext\*(Aq, \& label is \*(AqContent\*(Aq, \& render_as \*(AqTextarea\*(Aq; .Ve .PP Abspeichern bitte nicht vergessen. .SS "Erstellung der Datenbank" .IX Subsection "Erstellung der Datenbank" Gut. Nun ist es an der Zeit, die Datenbank zu erstellen. Standardgema\*:\*8 benutzt Jifty eine SQLite Datenbank. Wenn Sie lieber PostgreSQL oder MySQL verwenden mo\*:chten, dann ko\*:nnen Sie Anpassungen an \&\fIetc/jifty.yml\fR vornehmen. (Sehen Sie dazu in \f(CW\*(C`Jifty::Config\*(C'\fR nach, um mehr daru\*:ber zu erfahren.) .PP .Vb 7 \& # jifty schema \-\-setup \& INFO \- Generating SQL for application MyWeblog... \& INFO \- Using MyWeblog::Model::Post \& INFO \- Using Jifty::Model::Session \& INFO \- Using Jifty::Model::Metadata \& INFO \- Using Jifty::Model::Schema \& INFO \- Set up version v0.0.1, jifty version 0.607280 .Ve .SS "Start des Jifty Application Server" .IX Subsection "Start des Jifty Application Server" \&\s-1OK\s0. Nun haben Sie eine lauffa\*:hige, aber noch einfache Applikation. Starten Sie den Webserver und schauen Sie sich um. Werfen Sie einen Blick auf die \s-1AJAX\s0 gesteuerte Administrations-Umgebung, die Online Dokumentation und das Pony. .PP .Vb 2 \& # ./bin/jifty server \& INFO \- You can connect to your server at http://localhost:8888/ .Ve .PP Starten Sie diese Kommandofolge immer im Hauptverzeichnis Ihrer Jifty Applikation, andernfalls werden etliche Fehlermeldungen die Folge sein. .PP Auf den meisten Plattformen wird ein einfaches \*(L"jifty server\*(R" Kommando ebenfalls funktionieren. :) .SS "Erstellung der Benutzeroberfla\*:che" .IX Subsection "Erstellung der Benutzeroberfla:che" Die Administrations-Umgebung gibt Ihnen zwar alles, was Sie brauchen, um mit den Daten der Applikation zu arbeiten, ist aber noch lange kein Weblog. .PP \fIErstellung von Posts\fR .IX Subsection "Erstellung von Posts" .PP Erstellen Sie eine Seite zum Posten eines neuen Weblog Eintrages: .PP .Vb 1 \& # cd share/web/templates/ .Ve .PP Erstellen Sie eine neue Datei namens \fIpost\fR in Ihrem Editor. Stellen Sie sicher, da\*8 diese so aussieht: .PP .Vb 3 \& <%init> \& my $action = Jifty\->web\->new_action(class => \*(AqCreatePost\*(Aq); \& \& \& <&| /_elements/wrapper, title => "Post Eintrag Erstellen" &> \& <% Jifty\->web\->form\->start() %> \& <% Jifty\->web\->form\->next_page( url => \*(Aq/\*(Aq) %> \& <% $action\->form_field(\*(Aqtitle\*(Aq) %> \& <% $action\->form_field(\*(Aqbody\*(Aq) %> \& <% Jifty\->web\->form\->submit( label => \*(AqPost\*(Aq ) %> \& <% Jifty\->web\->form\->end() %> \& .Ve .PP Ja, dies ist eine Template Datei in HTML::Mason Syntax. Wenn Sie noch nicht genug u\*:ber Mason wissen, empfehlen wir dessen Online Dokumentation fu\*:r mehr Details. \fIMason Templates\fR sollten jeweils in der ersten Spalte der Datei beginnen. Besonders wichtig sind die \&\f(CW\*(C`<%init>\*(C'\fR und \f(CW\*(C`\*(C'\fR Blo\*:cke, die unbedingt lingsbu\*:ndig geschrieben werden mu\*:ssen. .PP \fIAnzeige\fR .IX Subsection "Anzeige" .PP Es ist relativ einfach, eine \fIeinfache\fR Auflistung von Eintra\*:gen zu erhalten und ein wenig aufwa\*:ndiger, eine \s-1AJAX\s0 gesteuerte seitenweise Darstellung zu bekommen. Hier beschreiben wir, wie man beides macht; Sie ko\*:nnen entscheiden, welches Ihnen besser gefa\*:llt. .PP (Falls Sie per Kopieren und Einfu\*:gen den Beispiel-Code von unten u\*:bertragen, stellen Sie sicher, da\*8 er in einer Spalte erscheint, ansonsten wird es nicht funktionieren.) .PP Der schnelle Weg .IX Subsection "Der schnelle Weg" .PP Erstellen Sie eine neue Datei \fIindex.html\fR im \fIshare/web/templates\fR Verzeichnis in Ihrem Editor. (Der Webserver wird die \s-1URL\s0 \&\f(CW\*(C`/index.html\*(C'\fR als die \fIStandard\fR Seite fu\*:r Ihre Applikation annehmen.) Befu\*:llen Sie die Datei wie folgt: .PP .Vb 4 \& <%init> \& my $posts = MyWeblog::Model::PostCollection\->new(); \& $posts\->unlimit(); \& \& \& <&| /_elements/wrapper, title => Jifty\->config\->framework(\*(AqApplicationName\*(Aq) &> \&
\& % while (my $post = $posts\->next) { \&
<% $post\->title %>
\&
<% $post\->body %>
\& % } \&
\& .Ve .PP (Entfernen Sie die Leerzeichen am Zeilenanfang!) .PP Die aufwa\*:ndige Art, mit der Sie viele coole Dinge bekommen .IX Subsection "Die aufwa:ndige Art, mit der Sie viele coole Dinge bekommen" .PP Die \fIaufwa\*:ndige Art\fR benutzt eines von Jifty's fortgeschrittenen Eigenschaften: \fIPageRegions\fR (Seitenbereiche). Diese Bereiche erlauben Ihrer Applikation einzelne Bestandteile einer Seite unabha\*:ngig voneinander neu zu laden. Das funktioniert sowohl unter Benutzung von \s-1AJAX\s0 auf modernen Browsern, als auch mit \s-1GET\s0 Requests auf nicht JavaScript fa\*:higen Browsern wie \f(CW\*(C`lynx\*(C'\fR, \f(CW\*(C`w3m\*(C'\fR oder dem Browser Ihres Handys. .PP Der Nachteil dieser Methode ist, da\*8 jeder Seiten-Bereich in einer eigenen \fIFragment\fR Datei vorliegen mu\*8. .PP Die aufwa\*:ndige Art beginnt zuna\*:chst genauso wie der schnelle Weg. Erstellen Sie eine neue Datei mit dem Namen \&\fIshare/web/templates/index.html\fR in Ihrem Editor. Befu\*:llen Sie die Datei mit: .PP .Vb 1 \& <&| /_elements/wrapper, title => Jifty\->config\->framework(\*(AqApplicationName\*(Aq) &> \& \& <% Jifty\->web\->region(name => "myweblog\-posts", \& path => "/fragments/page_of_posts") %> \& .Ve .PP Wenn Sie mitgedacht haben, dann haben Sie bestimmt schon erraten, da\*8 Sie als na\*:chstes eine Datei \&\fIshare/web/templates/fragments/page_of_posts\fR mit dem nachfolgenden Inhalt anlegen du\*:rfen: .PP .Vb 10 \& <%args> \& $page => 1 \& \& <%init> \& my $posts = MyWeblog::Model::PostCollection\->new(); \& $posts\->unlimit(); \& $posts\->set_page_info( current_page => $page, \& per_page => 15 \& ); \& $m\->out("Keine Eintra\*:ge.") if ($posts\->pager\->total_entries == 0); \& \& \& % if ($posts\->pager\->last_page > 1) { \& Seite <% $page %> von <% $posts\->pager\->last_page %> \& % } \&
\& % while (my $post = $posts\->next) { \&
<% $post\->title %>
\&
<% $post\->body %>
\& % } \&
\& \& % if ($posts\->pager\->previous_page) { \& <% Jifty\->web\->link( label => "vorherige Seite", onclick => { args => { page => $posts\->pager\->previous_page } } ) %> \& % } \& % if ($posts\->pager\->next_page) { \& <% Jifty\->web\->link( label => "na\*:chste Seite", onclick => { args => { page => $posts\->pager\->next_page } } ) %> \& % } .Ve .PP Nun starten Sie den Jifty Webserver erneut. Erstellen Sie einen Post indem Sie die \s-1URL\s0 \f(CW\*(C`/post\*(C'\fR auf Ihrem Webserver anfahren. Erstellen Sie wenigstens 15 Eintra\*:ge und beobachten Sie dabei, wie Jifty Ihnen die \&\s-1AJAX\s0 Kno\*:pfe \f(CW\*(C`vorherige Seite\*(C'\fR und \f(CW\*(C`na\*:chste Seite\*(C'\fR erstellt. Schalten Sie JavaScript aus oder verwenden Sie lynx und beobachten Sie wie \s-1AJAX\s0 automatisch zuru\*:ckfa\*:llt zum vollsta\*:ndigen Laden der jeweils neuen Seite. Alles umsonst. Danke, Jifty! .PP \fIHey, woher kam diese Klasse?\fR .IX Subsection "Hey, woher kam diese Klasse?" .PP Wenn Sie genau aufgepasst haben, dann haben Sie sich sicher gefragt, woher die \f(CW\*(C`MyWeblog::Model::PostCollection\*(C'\fR Klasse kam. Es gibt keine Datei mit dem Namen \fIPostCollection.pm\fR. Jifty setzt \&\f(CW\*(C`Jifty::ClassLoader\*(C'\fR ein, um einige Klassen fu\*:r Sie zu erstellen. Selbstversta\*:ndlich ko\*:nnten Sie das ebenfalls tun. Lesen Sie unter Jifty::ClassLoader mehr daru\*:ber. .SS "Navigation" .IX Subsection "Navigation" Natu\*:rlich ist es unscho\*:n, sich die \s-1URL\s0 der Post Seite merken zu mu\*:ssen. Um einen \fBPost\fR Eintrag im Menu\*: zu bekommen, mu\*:ssen Sie die Standard Menu\*:s u\*:berschreiben. .PP Jifty's \fIStandard\fR Menu\*:s werden durch \fI_elements/nav\fR in den Standard Applikations Templates (die mit dem Pony) erzeugt. Im Augenblick bleibt Ihnen nichts anderes u\*:brig, als \fI_elements/nav\fR zu u\*:berschreiben. (Wir arbeiten an Methoden, dies besser zu gestalten.) .PP Legen Sie innerhalb des Verzeichnisses \fIshare/web/templates\fR Ihrer Applikation ein Verzeichnis \fI_elements\fR an. .PP .Vb 1 \& mkdir share/web/templates/_elements .Ve .PP Sie mo\*:chten bestimmt mit den normalen Jifty Templates arbeiten, also mu\*:ssen wir nur den \f(CW\*(C`$top\->child( Post... )\*(C'\fR Teil anfu\*:gen. .PP .Vb 2 \& cat $(perl \-MJifty::Util \-e \*(Aqprint Jifty::Util\->share_root\*(Aq \e \& )/web/templates/_elements/nav > share/web/templates/_elements/nav .Ve .PP Ansonsten ko\*:nnen Sie innerhalb \fI_elements\fR auch gerne eine neue Datei namens \f(CW\*(C`nav\*(C'\fR anlegen, die so aussehen ko\*:nnte: .PP .Vb 6 \& <%init> \& my $top = Jifty\->web\->navigation; \& $top\->child( Home => url => "/"); \& $top\->child( Post => url => "/post", \& label => "Neuen Eintrag"); \& .Ve .PP Mehr Information u\*:ber das Menu\*: System ko\*:nnen Sie der Dokumentation unter Jifty::Web::Menu entnehmen. .SS "Das war's" .IX Subsection "Das war's" Das war alles, das Sie beno\*:tigen, um anzufangen, Jifty Applikationen zu erstellen. Wir arbeiten hart daran, Jifty noch einfacher einsetzbar zu machen und die \fIdicken Brocken\fR dieses Tutorials so bald als mo\*:glich zu vereinfachen. .PP Bitte nehmen Sie auf der \f(CW\*(C`jifty\-devel\*(C'\fR Mailing Liste Kontakt mit uns auf, wenn Sie Fragen haben, wie man Jifty benutzt oder was Sie schwierig zu benutzen finden. Dies ist eine Mailing Liste in englischer Sprache. .SH "HILFE" .IX Header "HILFE" .SS "Online Hilfe" .IX Subsection "Online Hilfe" Das \f(CW\*(C`jifty\*(C'\fR Kommandozeilen Programm besitzt eine eingebaute Hilfe Funktion. .PP .Vb 1 \& jifty help \& \& jifty help .Ve .PP Wenn Ihr Server mit eingeschaltetem Administrations-Modus arbeitet (die Konfigurations-Einstellung \f(CW\*(C`AdminMode\*(C'\fR fehlt oder sie ist ungleich Null), dann ko\*:nnen Sie den \*(L"Online Docs\*(R" Link in Ihrem Browser benutzen, um eine ausfu\*:hrliche modulweise Dokumentation zu Jifty zu erhalten. .SS "Beitreten der Mailing Liste" .IX Subsection "Beitreten der Mailing Liste" \&\f(CW\*(C`jifty\-devel@lists.jifty.org\*(C'\fR ist der Ort, an dem wir besprechen, wie wir Jifty erstellen, was es an Problemen oder Vorschla\*:gen gibt und so weiter. .PP Um der Liste beizutreten, senden Sie eine Mail an \&\f(CW\*(C`jifty\-devel\-subscribe@lists.jifty.org\*(C'\fR. Bitte beachten Sie, da\*8 die Kommunikation in dieser Liste in englischer Sprache gefu\*:hrt wird. .SS "Unser Wiki" .IX Subsection "Unser Wiki" Wir haben ein Wiki! (Tatsa\*:chlich ist das Wiki die hauptsa\*:chliche Website von Jifty). .PP Besuchen Sie uns unter , lesen Sie und tragen Sie etwas bei! .PP Das Wiki wird von \fIWifty\fR betrieben, einem Wiki das auf Jifty basiert. Sein Code ist frei verfu\*:gbar in unserem Subversion Repository. .SH "FEHLER MELDEN" .IX Header "FEHLER MELDEN" In dieser fru\*:hen Phase von Jifty melden Sie bitte alle Fehler, die Ihnen auffallen, an \f(CW\*(C`jifty\-devel@lists.jifty.org\*(C'\fR. .SH "KU\*:NFTIGE TUTORIALS" .IX Header "KU:NFTIGE TUTORIALS" Ku\*:nftige Tutorials werden enthalten: .IP "\(bu" 4 Zugangskontrolle und Sicherheit .IP "\(bu" 4 Erweiterung von Datenmodellen .IP "\(bu" 4 Umfangreiche Beschreibung des Dispatchers .IP "\(bu" 4 Einbindung einer Applikation in einen Live Server .IP "\(bu" 4 Web Services im Detail .IP "\(bu" 4 Continuations (Fortsetzungen) und deren Einsatz .IP "\(bu" 4 Anpassungen der Darstellung (Benutzerdefinierte Wrapper und \s-1CSS\s0)