Implementierung eines eigenen Moduls
Ursprünglicher Autor: Daniel Schliebner
Inhaltsverzeichnis
Einleitung
Dieser Artikel beschäftigt sich damit, wie Sie selbst Plugins für DynPG entwickeln können. Hierzu geht dieses Tutorial von einem Prototyp aus, welchen Sie unter DynPG Plugin Pattern Link herunter laden können. Prinzipiell geht in diesem Tutorial darum, ein rudimentäres Plugin dem Ordner
/dynpg/plugins/
hinzuzufügen. Der Plugin-Prototyp den Sie unter DynPG Plugin Pattern Link herunter geladen haben ist bereits vom Prinzip her funktionstüchtig. Als Experiment können Sie z.B. den Ordner "DPGplugin" aus dem Paket in das DynPG-Pluginverzeichhnis kopieren. Die Konsequenz dessen ist, dass nun im Backend von DynPG ein neuer Menüpunkt "My Plugin" erscheint.
Das Ziel dieses Artikels ist es nun
- den Namen des Plugins zu ändern in DPGfoo,
- die Struktur eines Plugins zu erklären.
Grundsätzlicher Aufbau
Das herunter geladene Paket enthält zwei Ordner. Zum einen "plugins" und zum anderen "update". Interessant für diesen Artikel ist vornehmlich der Ordner "plugins" in dem sich das Plugin, welches wir im Laufe dieses Tutorials verändern, befindet. Der Ordner "update" hingegen enthält u.a. eine SQL-Datei in welcher Sie zum späteren Zeitpunkt initiale SQL-Anweisungen schreiben können, welche bei der Installation des Plugins ausgeführt werden sollen.
Namensänderung in DPGfoo
Zuerst wollen wir dem Kind einen neuen Namen geben. Hierfür benötigen Sie noch keine Kenntnisse über das Funktionieren eines Plugins. Sie können mehr oder weniger ohne Kenntnis die einzelnen im Paket enthaltenen PHP-Dateien durchgehen und den vorhandenen Namen abändern. Wie bereits angekündigt soll der neue Name DPGfoo lauten. Zum Ändern des Namens gehen Sie wiefolgt vor:
- Ändern Sie den Namen des Ordner "DPGplugin" in "DPGfoo".
- Ändern Sie den Namen der Datei "PLUGINNAME.class.php" in "foo.class.php".
- Gehen Sie in die einzelnen PHP-Dateien des herunter geladenen Pakets. Hier ersetzen Sie sukzessive
- den Platzhalter "PLUGINNAME" in "foo" (in allen Variablen und Klassennamen, wo dieser vorkommt)
- den Platzhalter "DPGplugin" in "DPGfoo" (in dieser Schreibweise!)
- den Platzhalter "dpgplugin" in "dpgfoo" (in dieser Schreibweise!)
Hinweis: die Ersetzung der Namen sollten Sie sorgfältig durchführen und sich im Klaren sein, was sie ersetzen. So beinhalten z.B. Methoden stets den Platzhalter "dpgplugin" (klein geschrieben), die globale Variable $dynPG_PLUGINNAME_Class_ID stets den Platzhalter "PLUGINNAME" und in der Klassendatei "PLUGINNAME.class.php" finden sich mehrere Vorkommen verschiedener Platzhalter.
Natürlich können Sie statt "DPGfoo" einen eigenen aussagekräftigen Namen für Ihr Plugin wählen. Wichtig ist nur, dass alle Ersetzungen und Bennenungen der Methoden und Dateien im Plugin in analoger Weise zu der beschriebenen erfolgt. Heißt also Ihr Plugin bspw. "DPGblog", so müssen Sie die Methoden in oben bechriebener Weise mit "dpgblog" identifizieren. Entsprechend würden Sie vermutlich die Datei "PLUGINNAME.class.php" in "blog.class.php" umbenennen.
Wenn Sie die Änderung des Namens abgeschlossen haben, können Sie ins Backend schauen. Sofern dort keine Fehlermeldungen erscheinen, haben Sie vermutlich alles richtig gemacht.
Struktur des Plugins
Prinzipiell hat ein DynPG Plugin zwei getrennte Teile. Der erste implementiert das Backend und der zweite implementiert das Frontend. Folgende Dateien sind für das Backend relevant:
- "_backend.php" und alle weiteren Dateien, welche Sie anlegen und mit einem Unterstrich beginnen.
- "editorplugins.php": in dieser Datei können Sie Plugins für den WYSIWYG Editor festlegen. Per
$__PLUGINS__[] = 'dynpg_foo_plugin';
- können Sie so etwa das Plugin "dynpg_foo_plugin" beim Editor registrieren.
- "verticalmenu.php": hier legen Sie Menüpunkte für das Backend fest. Einen neuen Menüpunkt ergänzen Sie mit
$plugin->menuAdd(C_DYNPG_PLUGIN_SINGMENU, 'Punkt 1', md5('foo_backend_1'));
- Implizit haben Sie hier nun einen neuen Bereich im DynPG-Backend deklariert, welcher angezeigt wird, sofern Sie im Backend auf den Menüpunkt "Punkt 1" klicken. Sie müssen DynPG nun noch mitteilen, welche PHP-Backend-Datei (wir erinnern uns, dass diese immer mit einem Unterstrich beginnen) dabei geladen werden soll. Dies geschieht in der Datei "extensionfiles.php".
- "extensionfiles.php": in dieser Datei legen Sie fest, welche Dateien bei welchen Parametern geladen werden sollen. Für den obigen Menüpunkt müssten Sie dieser Datei die Zeile
$plugin->relate_Selector_Menu(md5('foo_backend_1'), '_punkt_1_datei.php');
- hinzufügen. Als Resultat würde im Backend bei Klick auf "Punkt 1" die Datei "_punkt_1_datei.php" geladen. Als Schablone für neue Backenddateien können Sie die Datei "_backend.php" verwenden.
- In "languages/dynpg_backend" finden Sie Sprachdateien, welche Sie erweitern können. Wie Sie einen Sprachstring in einer Backenddatei laden können Sie der Datei "_backend.php" entnehmen.
Für das Frontend ist im Prinzip die Datei "foo.class.php" die wichtigste Komponente. DynPG-Plugins können über den Editor im DynPG-Backend über Platzhalter-Bilder eingefügt werden. Diese Ersetzung geschieht in der Methode "perform()". Diese ruft dazu zur Erzeugung des Frontend-Codes die Methode "write_foo()" (vorher "write_PLUGINNAME()") auf. Konkret liefert also die Rückgabe der Methode "write_foo()" die Ausgabe des Plugins auf der Webseite. Selbstverständlich können Sie die Methoden beliebig unterteilen und ggf. mehrere Platzhalter einführen, welche verschiedene Ausgaben im Frontend erzeugen.
Die letzte wichtige Komponente des Plugins ist die DB API. Diese finden Sie implementiert in den drei Dateien im Ordner "api". Die Datei "db_api.php" stellt dabei verschiedene Klassen für einzelne Datenbanktabellen bereit. Konkret wird in der "db_pattern.inc.php" im Property "$tbl_container" die Struktur der Datenbank erklärt, indem für jede Relation (Tabelle) der Datenbank ein entrpechender Eintrag vorhanden sein muss. Exemplarisch ist dies in der herunter geladenen Schablone für eine fiktive Tabelle "dynpg_myPlugin_dbTable" gemacht. In der "db_api.php" existiert nun zu dieser Tabelle ein entsprechender Wrapper in Form einer Klasse, welcher für diese spezielle Tabelle Methoden zum Einfügen, Löschen, Update und auslesen der Daten bereit stellt. Die Klassen der "db_api.php" sind überall im Plugin (Backend, Frontend) registriert, sodass Sie stets Zugriff auf die entsprechenden Datenbankwrapper haben.
Zum Abschluss soll also kurz erklärt werden, wie Sie mithilfe dieser in Klassen gewrapten Datenbanktabellen Daten auslesen und modifizieren. Die folgenden Codebeispiele orientieren sich dabei an den Beispieldefinitionen des herunter geladenen Pakets.
Zum Auslesen aller Zeilen der Tabelle "dynpg_myPlugin_dbTable" kann z.B. folgender Code benutzt werden:
$dbh = new DB_MyPlugin_DBTable(); $dbh->readAll(); while ($row = $dbh->db_fetch_row()) { // Zugriff auf Tupel über $row['attribut']; }
Möchten wir etwa den Eintrag mit der ID ("myTable_id") 3 im Attribut "myAttribute1" ändern, so können wir dafür folgenden Code verwenden:
$dbh = new DB_MyPlugin_DBTable(); $dbh->update( Array( 'myAttribute1' => 'Neuer Wert' ), 3 );
Die erste Schleife kann z.B. dazu benutzt werden, dynamisch ein Listing im Template mit Inhalt zu füllen. Entsprechenden Code dazu findet man z.B. in TemplatesEngine-2010-07-29.pdf. Informationen zu Templates findet man in Templates.