Dieses Projekt kann keine vollständige Einführung in die PHP- und DokuWiki-Plugin-Programmierung sein. Wir bewegen uns innerhalb eines bestehenden Frameworks von DokuWiki Funktionen und Rahmenbedingungen und lernen, uns in dieser Umgebung zurechtzufinden, um unsere Ziele zu erreichen. "Learning as we go". Ein solches Vorgehen fällt vielen analytisch denkenden Menschen manchmal schwer.
~/public_html/wiki/lib/plugins
git clone https://codeberg.org/ironiemix/dokuwiki-plugin-projekt.git
mv dokuwiki-plugin-projekt/ projekt
Das Verzeichnis eines DokuWiki-Plugins muss immer genau so heißen, wie das Plugin in den php-Dateien auch benannt ist. Da das Vorlagen Plugin dort "projekt" heißt, muss es sich also in einem Ordner mit den Namen "projekt" befinden, damit es funktionieren kann.
Füge auf deiner Startseite im Wiki den Code
{{projekt>einTest}}
ein und betrachte die Ausgabe. Das sollte in etwa so aussehen:
Tipp: Füge auf der Wiki-Seite, auf der du das Plugin testest am Seitenstart den Dokuwiki Code
~~NOCACHE~~
ein, um das Caching der Seite abzuschalten - das erspart dir verwirrende Probleme, wenn du alte Versionen aus dem Cache angezeigt bekommst.
Das "projekt" Plugin ist ein sogenanntes "Syntax-Plugin", es erweitert die Dokuwiki Syntax um eigene Befehle. In unserem einfachen Fall findet lediglich eine Ersetzung statt: Wenn in der Wiki Seite der Code
{{projekt>optionen}}
gefunden wird, wird dieser durch einen durch das Plugin bestimmten Text ersetzt. Im Quelltext des Plugins wird gesteuert, nach welchen Code-Mustern in der Wiki-Seite gesucht wird, in welcher Weise gefundene Muster verarbeitet werden und was anstelle des gefundenen Musters ausgegeben werden soll.
Dieser Vorgang wird in der Datei syntax.php
im Plugin Verzeichnis gesteuert, dabei spielen vor allem die drei Methoden connectTo
, handle
und render
eine Rolle, die jedes DokuWiki-Syntax Plugin haben muss. Der prinzipielle Ablauf ist der folgende:
Öffne die Datei syntax.php
deines Plugins (innerhalb des Verzeichnisses projekt
) im Editor deiner Wahl. Der Quelltext ist mit Kommentaren versehen - vollziehe den im Diagramm oben dargestellten Ablauf beim finden des Musters und dessen Ersetzung im Quelltext nach.
Überprüfe deine Erkenntnisse, indem du das Plugin veränderst:
>
Zeichen weglassen? Kannst du die Option nach dem >
Zeichen weglassen?projekt
vor dem>
Zeichen etwas anderes schreiben?>
auch nichts stehen kann.::mondial>.+?::
reagiert. Mach die Änderung anschließend rückgängig.
Baue eine Entscheidung in die Ausgabe ein:
{{projekt>tabelle}}
soll eine Tabelle mit Befehl und Optionen ausgeben (s.o.)
{{projekt>liste}}
eine Liste wie zu Beginn.
Ein Syntax Plugin kann auch mit mehr als einem Pattern verbunden werden. Auf diese Weise kann man auch mehrere "Ersetzungs-Befehle" in einem Plugin implementieren, indem man in connectTo
mehrere Muster suchen lässt:
$this->Lexer->addSpecialPattern('\{\{ptabelle>.*?\}\}', $mode, 'plugin_projekt'); $this->Lexer->addSpecialPattern('\{\{pliste>.*?\}\}', $mode, 'plugin_projekt');
Übernehme diese beiden Zeilen in deine connectTo-Methode und steuere die Ausgabeart nun über den Befehl anstelle der Option.
Um den im Plugin erzeugen und dann im Browser angezeigten HTML-Code noch mit eigenen Styles zu versehen, reicht es, im Plugin Verzeichnis eine Datei style.css
anzulegen, in denen man CSS-Regeln festlegen kann. Styles in dieser Datei werden von DokuWiki beim Seitenaufruf automatisch mitgeliefert.
Erstelle eine Datei style.css
im Plugin Verzeichnis mit folgendem Inhalt:
.projekt-befehl { color: red; } .projekt-option { color: green; }
Passe dann die Ausgabe im Plugin so an, dass der Befehl zwischen
<span class="projekt-befehl">...</span>
steht und die Option entsprechend und überprüfe das Ergebnis.
Die CSS-Dateien werden von Dokuwiki lange im Cache gehalten. Wenn aktualisierte CSS-Regeln nicht im Browser ankommen, kann man das Löschen des Caches erzwingen, indem man auf dem Übungsserver den Zeitstempel der Datei ../wiki/conf/dokuwiki.php
aktualisiert: touch ~/public_html/wiki/conf/dokuwiki.php
.
Da die Plugin-Vorlage aus einer Quelle geklont wurde, auf die du keine Schreibrechte besitzt, sorgen wir jetzt noch dafür dass du eine weiteren Entwicklern in einem eigenen Repo weiterverfolgen kannst.
Lege zunächst ein leeres Git-Repo auf Gitea an. Im Beispiel verwende ich https://gitea.schule.social/sbel/dokuwiki-plugin-frank.git
. Die Adresse zeigt Gitea nach dem Erstellen des Repos in der Kurzanleitung an:
Jetzt wechselt man in das Plugin-Verzeichnis auf dem Übungsserver und setzt dort eine neue Adresse für den "origin" des Repos:
git remote set-url origin https://gitea.schule.social/sbel/dokuwiki-plugin-frank.git
Von nun an kann man das Repository auf den eigenen Origin pushen - du hast einen Fork erstellt.