CakePHP 1.2 Blog Tutorial Teil 3
Im letzten Teil des Tutorials beschäftigen wir uns mit dem Hinzufügen einiger Erweiterungen für unser rudimentäres Blog.
3. Extras
- Kommentarfunktion einbauen
- Helper erstellen
Teil 3.1
Kommentarfunktion einbauen
Jeder möchte in seinem Blog gerne Kommentare lesen (wenn es nicht gerade Spam ist). In diesem Teil des großen Cake 1.2 Tutorials werdet ihr lernen, was Scaffolding ist und wie man Tabellen verknüpft.
Fangen wir am besten mit dem Erstellen der Datenbanktabelle an. Ladet diesen SQL Code in eure Datenbank:
-
CREATE TABLE cake_comments (
-
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-
autor VARCHAR(50),
-
inhalt TEXT,
-
post_id INT,
-
created DATETIME DEFAULT NULL,
-
modified DATETIME DEFAULT NULL
-
);
Das hat gut funktioniert! Bevor ihr allerdings jetzt anfagt und Testdaten eintippt, muss ich euch leider enttäuschen, heute machen wir das anders.
Erstellt zuerst das Model
/app/models/comment.php
-
<?php
-
-
class Comment extends AppModel
-
{
-
var $name = ‘Comment’;
-
-
}
-
-
?>
Dies ist sogleich unsere Brücke zwischen den beiden Datenbanktabellen. Wir haben in der SQL Anweisung festgelegt, dass es ein Feld post_id geben soll, welches jedes Kommentar haben wird. Hier legen wir nun fest, dass jedes Kommentar zu einem bestimmten Post gehört. Wenn ihr die Cake Konventionen einhaltet, braucht ihr hier keiner weiteren Optionen zu wählen. Eine gute Übersicht über Beziehungen zwischen Models liefert die Cake Anleitung. In diesem Tutorial reiße ich das Thema nur an, um euch die Einfachheit von Cake näher zu bringen.
Erstellen wir nun den Controller:
/app/controllers/comments_controller.php
-
<?php
-
-
class CommentsController extends AppController
-
{
-
var $name = ‘Comments’;
-
var $scaffold;
-
}
-
-
?>
Hier bedienen wir uns der sogenannten Scaffolding Technik. Es wird automatisch ein CRUD (Create, Read, Update, Delete) erstellt, mit dem ihr in den frühen Phase eurer Anwendung bereits im Browser Einträge hinzufügen, bearbeiten und löschen könnt.
Ruft nun die URL www.example.com/comments auf (example.com natürlich ersetzen durch euer Cakeverzeichnis).
ihr seht, dass wir eine ähnliche Darstellung erhalten wie in unserem Blog, ohne eine einzige Zeile Code geschrieben zu haben. Klickt nun auf “New Comment”. Tragt als Autor “Testautor” ein, als Inhalt “Testinhalt” und wählt als Post die Nummer 1. Nun wird euer Kommentar als zu Post 1 gehörend gespeichert.
Wenn wir nun aber auf die “1″ klicken oder die URL www.example.com/posts/view/1 aufrufen, stellen wir fest, dass wir den Kommentar nicht sehen können. Dies liegt natürlich daran, dass wir dem View noch keine Kommentaranzeige hinzugefügt haben, aber auch daran, dass das Model gar nicht weiß, dass es zugehörige Kommentare besitzt! Diesen Zustand können wir aber ändern, indem wir das Post Model ändern:
/app/models/post.php
Hier ist es zwar grammatikalisch nicht ganz korrekt (“hat viele Kommentar”), aber ihr versteht, wie Cake funktioniert. Wir geben diesem Model nun die Information, dass es viele Kommentare hat. Wird nun die URL www.example.com/posts/view/1 aufgerufen und der read Befehl in der Post Controller View Action ausgeführt, sucht Cake nun nicht nur die Informationen des Post selbst, sondern auch alle Comments, die zu diesem Post gehören.
Nun fehlt eigentlich nur noch die Kommentaranzeige, die wir nun dem view-View hinzufügen:
/app/views/posts/view.ctp
-
<h1><?php echo $post[‘Post’][‘titel’];?></h1>
-
<p><?php echo $post[‘Post’][‘inhalt’];?></p>
-
<p>Dieser Beitrag wurde erstellt am: <?php echo $post[‘Post’][‘created’];?></p>
-
<p><?php echo $html->link(‘zurück zur Übersicht’, ‘/posts/’);?></p>
-
-
<!– NEU –>
-
<h2>Kommentare:</h2>
-
<?php foreach($post[‘Comment’] as $comment):?>
-
<p><?php echo $comment[‘autor’];?> schrieb am <?php echo $comment[‘created’];?>:</p>
-
<p><?php echo $comment[‘inhalt’];?></p>
-
<hr>
-
<?php endforeach;?>
-
<!– Ende –>
Wir lassen alle Kommentare durch eine Schleife laufen. Das Array selbst könnt ihr euch mittels zum besseren Verständnis einmal ausgeben lassen.
-
(
-
(
-
[id] => 1
-
[titel] => Ein Titel
-
[inhalt] => und ein Inhalt
-
[created] => 2007-10-01 22:12:20
-
[modified] =>
-
)
-
-
(
-
(
-
[id] => 1
-
[autor] => Testautor
-
[inhalt] => Testinhalt
-
[post_id] => 1
-
[created] => 2007-10-02 11:59:14
-
[modified] => 2007-10-02 11:59:14
-
)
-
-
(
-
[id] => 2
-
[autor] => Kommentar2
-
[inhalt] => Ich habe hier einen zweiten Kommentar verfasst.
-
[post_id] => 1
-
[created] => 2007-10-02 12:09:17
-
[modified] => 2007-10-02 12:09:17
-
)
-
-
)
-
-
)
Natürlich eignet sich die oben vorgestellte Scaffold Möglichkeit nicht für den Produktiveinsatz, hier wäre es angebracht, im View ein Möglichkeit des Kommentar hinzufügens zu erstellen. Dies ist aber eine Aufgabe, die ihr mit dem bereits erhaltenen Cakewissen selbst erstellen könnt.
Teil 3.2
Helper erstellen
Wie ich im zweiten Teil des Tutorials bereits erwähnte, sind die SQL Datumsausgaben für uns Europäer schwer verständlich, da wir ein Datum gerne im Format TT.MM.JJJJ lesen. Anhand dieser kleinen Aufgabe erstellen wir uns einen Helper, mit dem wir das SQL Format beliebig ändern können.
Was sind Helper?
Helper sind kleine Scripte, die in Views helfen, die Ausgabe zu modifizieren. Ihr habt bereits mit dem Form-Helper einen Helfer kennengelernt, der das Erstellen von Formularen erleichtert.
Unsere Aufgabe wird nun sein, einen Helper zu erstellen, der ein ein SQL Datumsformat in ein normal lesbares Datumsformat umwandelt und dies mit oder ohne Zeitanzeige wieder ausgibt.
Erstellen wir zunächst den Helper. Helper werden im Ordner /app/views/helpers erstellt, wir nennen ihn datum.php:
/app/views/helpers/datum.php
-
<?php
-
class DatumHelper extends Helper
-
{
-
/* Diese Funktion wandelt SQL Datumsangaben im Datetimeformat
-
* in das deutsche Datumsformat um. Folgende Optionen können
-
* angegeben werden:
-
* 0 oder keine Angabe: Nur das Datum wird erstellt.
-
* 1: Es werden auch Stunden und Minuten ausgegeben.
-
* 2: Es werden Stunden, Minuten und Sekunden ausgegeben.
-
*/
-
-
function date_de($datum,$option = NULL) {
-
//Datum umwandeln
-
//Prüfen ob Optionen angebeben
-
if ($option == 1) {
-
//Anhängen der Stunden und Minuten
-
} elseif ($option == 2) {
-
//Anhängen der Stunden, Minuten und Sekunden
-
}
-
return $this->output($ausgabe);
-
}
-
}
-
?>
Wichtig ist, dass ihr bei return $this->output($ausgabe) zurückgebt, damit Cake dies besser versteht.
Euren gerade erstellten Helper fügt ihr nun noch in den Controller ein, damit der Helper auch geladen wird:
/app/controllers/posts_controller.php
-
<?php
-
-
class PostsController extends AppController
-
{
-
var $name = ‘Posts’;
-
/*NEU */
-
/*Ende */
-
-
function index() {
-
$eintraege = $this->Post->findAll();
-
-
$this->set(‘posts’,$eintraege);
-
}
-
/*Hier folgt der weitere Code des Controllers*/
-
}
-
-
?>
Ist auch dieser Schritt geschafft, folgt nun die Anpassung des view-Views.
/app/views/posts/view.ctp
-
<h1><?php echo $post[‘Post’][‘titel’];?></h1>
-
<p><?php echo $post[‘Post’][‘inhalt’];?></p>
-
<!–NEU –>
-
<p>Dieser Beitrag wurde erstellt am: <?php echo $datum->date_de($post[‘Post’][‘created’]);?></p>
-
<!–ENDE –>
-
-
<p><?php echo $html->link(‘zurück zur Übersicht’, ‘/posts/’);?></p>
-
-
<h2>Kommentare:</h2>
-
<?php foreach($post[‘Comment’] as $comment):?>
-
<!– NEU –>
-
<p><?php echo $comment[‘autor’];?> schrieb am <?php echo $datum->date_de($comment[‘created’],2);?>:</p>
-
<!– ENDE –>
-
<p><?php echo $comment[‘inhalt’];?></p>
-
<hr>
-
<?php endforeach;?>
Wie auch beim Form-Helper lautet die Schreibweise $helpername->funktionsname($argument1, $argument2,…). Nun solltet ihr deutsche Datumsanzeigen haben. Damit ist auch dieser Teil des Tutorials fertig. Dieses Beispiel ist natürlich nur ein ganz
Damit sind wir am Ende des großen Tutorials. Ich hoffe, ich konnte euch CakePHP 1.2 näher bringen und ihr werdet selbst ganz große Bäcker. Ich werde dieses Tutorial mit Sicherheit noch um ein paar Sektionen erweitern, also abonniert doch am besten einfach mein Blog.
Sollten euch Fehler in einem der Tutorialteile aufgefallen sein oder versteht ihr Teile des Tutorials nicht, so schreibt am besten einen Kommentar, damit andere, die über denselben Fehler stolpern, informiert sind. Natürlich sind auch Kritiken immer gerne willkommen, schließlich ist dies eins meiner ersten Tutorials, und soweit ich mich erinnern kann auch mit Abstand das größte, dass ich je geschrieben habe.
In diesem Sinne: Backt weiter!
Anhang:
Alle Dateien des Tutorials als Download: Download
Kategorie: CakePHP, Tipps | 22 Kommentare »
Veröffentlicht am Dienstag, den 2. Oktober 2007 um 13:00 Uhr veröffentlicht
Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.
