Inhaltsverzeichnis

Blogeinträge

Für den Zugriff auf die Tabelle blogentrys, also für das Erstellen und Anzeigen der Blogeinträge erstellen wir jetzt eine Klasse blogentry in der Datei class/blogentry.class.php1).


(A1)

Das Basisgerüst der blogentry-Klasse hat dieselbe Funktionalität wie die bloguser-Klasse: Im Konstruktor muss das Handle für den Datenbankzugriff "geholt" werden und als Objektvaraiable gespeichert werden.

Erstelle eine Datei mit diesem Basisgerüst, so dass in der syntax.php mit folgendem Code ein blogentry-Objekt instanziiert werden kann:

// Zugriff auf die Blogeinträge
$blogentry = new blogentry($dbusername, $dbpasswd, $dbname, $dbhost);

Teste, ob dein Code fehlerfrei funktioniert.

Hilfe


Methoden der Blogentry-Klasse

Jetzt müssen wie die blogentry-Klasse um weitere Funktionalitäten erweitern. Dazu können wir uns zunächst überlegen, welche Funktionen die Klasse benötigt, und diese als "Interface" definieren. Man kann sich vorstellen, dass ein Interface eine Klassendatei ist, die nur die Methodenköpfe ohne Code als "abstrakte Methoden" enthält:

<?php
 
interface blogentryInterface
   {
      // Alle Blogintraege anzeigen
      public function show_entries($userid=-1);
 
      // Neuen Blogeintrag hinzufügen
      public function insert_entry($userid);
 
      // Fehlaufrufe abfangen
      public function __call ($name, $param);
   }
 
?> 

Die Definition der blogentry-Klasse muss nun entsprechend angepasst werden:

class blogentry implements blogentryInterface {
  ...
}

(A2)

Erstelle die Datei class/blogentryInterface.class.php mit den abstrakten Methoden der blogentry-Klasse und passe die Klassendefinition der blogentry-Klasse an. Teste das veränderte Plugin und mache dir klar, was die Fehlermeldung bedeutet und wie man sie beheben kann.

Neuer Eintrag

Um einen neuen Eintrag hinzufügen zu können, benötigen wir ein Formular, das wir z.B. mit den bereits bekannten DokuWiki-Mitteln erzeugen können:

syntax.php
public function printform() {
 
    	// Erzeuge ein neues "Form" Objekt
    	$form = new dokuwiki\Form\Form();
 
        $form->addHTML("<h2>Hey, was geht?!</h2>");
    	$form->addTextArea('blogtext', '');
        $form->addHTML("<br/>");
    	$form->addButton('submit', 'Senden');
 
    	// Generate the HTML-Representation of the form
    	return $form->toHTML();
    }

Wenn das Formular Daten enthält, kann muss man den Blog Eintrag hinzufügen:

syntax.php
// Neuer Eintrag!
if (isset ($_POST["blogtext"]) && checkSecurityToken() ) {
    $blogentry->insert_entry($bloguser->getID(), $_POST["blogtext"]);
    msg("Hat geklappt!");
} else {
    $renderer->doc .= $this->printform();
}

In der Datei blogentry.class.php muss man nun noch den Code für den Datenbankeintrag ergänzen:

blogentry.class.php
public function insert_entry ($userid, $content) {
        print "Blogeintrag hinzufügen $userid";
 
        $statement = $this->db->prepare('INSERT INTO blogentrys (userid, content, created) VALUES (:userid,:content, :created)');
        $statement->execute(array('userid' => "$userid", 'content' => "$content", 'created' => time())); 
 
    }

(A3)

Füge die Codefragmente in dein Projekt ein, so dass du Blogeinträge anlegen kannst. Teste die Funktionalität.


(A4)

Ergänze die Dateien blogentry.class.php und blogentryInterface.class.php so, dass du eine Liste der Blogbeiträge des angemeldeten Benutzers und alle Beiträge anzeigen lassen kannst.

Erweitere das Plugin um Optionen, die die Ausgabe steuern:

 {{projekt>user}}

soll die Liste für den Benutzer ausgeben, oben das Formular für einen neuen Eintrag.

 {{projekt>microblog}}

soll alle Beiträge ausgeben, ohne Formular und sichtbar auch für nicht angemeldete Benutzer.

Füge die Codefragmente in dein Projekt ein, so dass du Blogeinträge anlegen kannst.


← Schritt 2 Schritt 4 →

1)
damit der Autoloader aus Schritt 1 sie findet…