faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:microblogging:step03:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:microblogging:step03:start [21.06.2021 16:29] sbelfaecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:microblogging:step03:start [21.06.2021 18:00] (aktuell) – [Neuer Eintrag] sbel
Zeile 6: Zeile 6:
 {{:aufgabe.png?nolink  |}} {{:aufgabe.png?nolink  |}}
 === (A1) === === (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:
 +
 +<code php>
 +// Zugriff auf die Blogeinträge
 +$blogentry = new blogentry($dbusername, $dbpasswd, $dbname, $dbhost);
 +</code>
 +
 +Teste, ob dein Code fehlerfrei funktioniert.
 +
 +++++ Hilfe | Die grundlegende ''blogentry''-Klasse ist eine Kopie des Konstruktors der ''bloguser''-Klasse:
 +<code php>
 +<?php
 +
 +class blogentry {
 +    protected $db;           // Das DB-Handle
 +  
 +    //Konstruktor
 +    public function __construct ($dbusername, $dbpassword, $dbname, $host="localhost"
 +    {
 +       // PDO Connection erzeugen/holen und als 
 +       // Objektattribut "speichern". Damit werden DB Zugriffe möglich.
 +       $this->db = mysqldb::getConnection($dbusername, $dbpassword, $dbname, $host);
 +
 +    } 
 +
 +
 +}
 +
 +?>
 +</code>
 +++++
 +----
 +
 +==== 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:
 +<code php>
 +<?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);
 +   }
 +
 +?> 
 +</code>
 +
 +
 +Die Definition der blogentry-Klasse muss nun entsprechend angepasst werden: 
 +
 +<code php>
 +class blogentry implements blogentryInterface {
 +  ...
 +}
 +</code>
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (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:
 +
 +<code php 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();
 +    }
 +</code>
 +
 +Wenn das Formular Daten enthält, kann muss man den Blog Eintrag hinzufügen:
 +
 +<code php syntax.php>
 +// Neuer Eintrag!
 +if (isset ($_POST["blogtext"]) && checkSecurityToken() ) {
 +    $blogentry->insert_entry($bloguser->getID(), $_POST["blogtext"]);
 +    msg("Hat geklappt!");
 +} else {
 +    $renderer->doc .= $this->printform();
 +}
 +</code>
 +
 +In der Datei ''blogentry.class.php'' muss man nun noch den Code für den Datenbankeintrag ergänzen:
 +
 +<code php 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())); 
 +
 +    }
 +</code>
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (A3) ===
 +
 +Füge die Codefragmente in dein Projekt ein, so dass du Blogeinträge anlegen kannst. Teste die Funktionalität.
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (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.
  
 ---- ----
 [[{}..:step02:start|<- Schritt 2 ]][[{|float-right}..:step04:start|Schritt 4 ->]] [[{}..:step02:start|<- Schritt 2 ]][[{|float-right}..:step04:start|Schritt 4 ->]]
  • faecher/informatik/oberstufe/datenbanken/projekt/dokuwiki_plugin/microblogging/step03/start.1624292963.txt.gz
  • Zuletzt geändert: 21.06.2021 16:29
  • von sbel