Inhaltsverzeichnis
DokuWiki
DokuWiki ist eine einfach zu bedienende und äußerst vielseitige Open-Source-Wiki-Software, die keine Datenbank benötigt.
Es wird von den Nutzern wegen seiner sauberen und lesbaren Syntax geliebt. Die einfache Wartung, Sicherung und Integration machen es zu einem Favoriten für Administratoren. Eingebaute Zugriffskontrollen und Authentifizierungs-Connectoren machen DokuWiki besonders nützlich im Unternehmenskontext, und die große Anzahl von Plugins der lebendigen Community ermöglicht eine breite Palette von Anwendungsfällen jenseits eines traditionellen Wikis.
DokuWiki (Erklährung)
DokuWiki ist eine beliebte Wahl bei der Wahl einer Wiki-Software und bietet viele Vorteile gegenüber ähnlicher Software.
- Einfach zu installieren und zu bedienen
- Geringe Systemanforderungen
- Eingebaute Zugriffskontrolllisten
- Große Vielfalt an Erweiterungen
- Über 50 unterstützte Sprachen
- Geräteunabhängig
- Open Source (!)
— Roland Otto 2026/04/14 20:30
Wikis lassen sich schnell aktualisieren und neue Seiten werden leicht hinzugefügt. DokuWiki wurde für Zusammenarbeit konzipiert und gleichzeitig eine Historie jeder Änderung verwaltet und könnte als:
- Unternehmenswissensdatenbank
- Privates Notizbuch
- Softwarehandbuch
- Projektarbeitsbereich
- CMS – Intranet
— Roland Otto 2026/04/14 20:30
Wir unterstützen Individualisierung auf allen Fachwissensebenen. Von der einfachen Konfiguration über die Admin-Oberfläche über das Herunterladen von Vorlagen und Plugins bis hin zur Entwicklung eigener Erweiterungen.
- Vorlagen (auch Skins/Themen genannt)
— Roland Otto 2026/04/14 20:30
Ein Teil von OpenSource ist, der Community etwas zurückzugeben, indem man sich engagiert. Es gibt zahlreiche Möglichkeiten, dies zu tun.
- Teilen Sie Ihre Erfahrungen mit
- Mach ein bisschen Wiki-Gartenarbeit
- Helfen Sie Plugin-Autoren mit Dokumentation
- Bugs und Feature-Wünsche einreichen
— Roland Otto 2026/04/14 20:30
2004-2025 © Andreas Gohr andi [at] splitbrain [dot] org1) und die DokuWiki-Community
Die DokuWiki-Engine ist unter GNU General Public License Version 2 lizenziert.
Wenn du DokuWiki in deinem Unternehmen nutzt, solltest du ein paar Euro spenden
.
Ich bin mir nicht sicher, was das bedeutet? Siehe die FAQ zu den Lizenzen.
1) Bitte kontaktieren Sie mich nicht für Hilfe und Unterstützung – nutzen Sie stattdessen die Mailingliste oder das Forum
Spezial-Programmierungen
==== Überblick: Was war das Ziel? ====
Du wolltest in deiner DokuWiki‑Seite einen Satz wie
„Erfahrung von über 15 Jahren Unterricht bei der VHS.“
nicht jedes Jahr manuell anpassen, sondern automatisch berechnen lassen, ausgehend von einem festen Startdatum (z. B. 01.09.2010).
Konkret sollte also DokuWiki selbst ausrechnen:
- wie viele volle Jahre seit einem Startdatum vergangen sind
- und diese Zahl im Text anzeigen
Beispiel:
''Erfahrung: 15 Jahre Unterricht bei der VHS.''
statt:
''Erfahrung: {{vhsexperience>2010-09-01}}''
===== 1. Erste Idee: Fertige Plugins wie „date“ oder „year“ =====
==== 1.1 Das „date“-Plugin ====
Die ursprüngliche Idee war, ein vorhandenes Plugin zu nutzen, z. B. das Date‑Plugin.
Dieses Plugin bietet u. a. eine Syntax, um Datumsdifferenzen zu berechnen, z. B.:
''{{date>diff:2010-09-01:now:years}}''
Die Idee dahinter:
2010-09-01= Startdatumnow= aktuelles Datumyears= Ausgabe in Jahren
Erwartetes Ergebnis wäre z. B.:
''15''
oder eingebettet:
''Erfahrung: {{date>diff:2010-09-01:now:years}} Jahre Unterricht bei der VHS.''
==== 1.2 Warum das bei dir nicht funktioniert hat ====
In deinem Wiki wurde der Ausdruck aber nicht berechnet, sondern quasi „auseinandergerissen“ angezeigt, etwa so:
''Erfahrung: diff:2010-09-01:now:years Jahre Unterricht bei der VHS.''
Das ist ein typisches Zeichen dafür, dass:
- die äußere Plugin‑Syntax
...nicht erkannt wurde - das Plugin nicht installiert oder nicht geladen ist
- DokuWiki den Inhalt daher einfach als normalen Text behandelt
Zusätzlich ist das Date‑Plugin relativ alt und kann mit neueren DokuWiki‑Versionen Probleme haben (Inkompatibilität, nicht mehr gepflegt, etc.).
===== 2. Alternative: Year‑Plugin (Jahresdifferenz über das Jahr) =====
Eine einfachere Alternative ist das Year‑Plugin, das nur mit Jahreszahlen arbeitet.
Beispiel:
''{{year>2010}}''
Das berechnet:
- aktuelles Jahr – 2010
Also z. B. im Jahr 2026:
''{{year>2010}} → 16''
Eingebettet:
''Erfahrung: {{year>2010}} Jahre Unterricht bei der VHS.''
Vorteil:
- sehr simpel
- oft kompatibler als komplexere Plugins
Nachteil:
- rechnet nur mit Jahren, nicht mit exakten Daten
- berücksichtigt nicht, ob der Jahrestag im aktuellen Jahr schon erreicht ist
===== 3. Endgültige Lösung: Eigenes Mini‑Plugin vhsexperience =====
Da die fertigen Plugins bei dir nicht zuverlässig liefen bzw. nicht installiert waren, hast du dich für eine eigene, maßgeschneiderte Lösung entschieden: ein kleines, eigenes Plugin.
Ziel:
- Syntax im Wiki:
''{{vhsexperience>2010-09-01}}''
- Ausgabe im HTML:
''15 Jahre''
===== 4. Wie DokuWiki‑Plugins grundsätzlich aufgebaut sind =====
Damit deine Schüler verstehen, was da passiert, lohnt sich ein kurzer Blick auf den Aufbau eines DokuWiki‑Plugins.
==== 4.1 Plugin‑Ordner ====
Plugins liegen in:
''lib/plugins/<pluginname>/''
Wichtig:
<pluginname>darf nur Kleinbuchstaben und Ziffern enthalten- keine Unterstriche, keine Bindestriche, keine Großbuchstaben
- Beispiel:
vhsexperienceist gültig,vhs_experienceist ungültig
==== 4.2 plugin.info.txt ====
In jedem Plugin‑Ordner liegt eine Datei plugin.info.txt, die DokuWiki sagt:
- wie das Plugin heißt
- wer der Autor ist
- wofür es gedacht ist
Beispiel:
''base vhsexperience author Roland email - name VHS Experience Plugin desc Berechnet automatisch die Jahre seit einem Startdatum. url https://euroba.de version 2026-04-14''
Wichtig:
basemuss exakt dem Ordnernamen entsprechen (vhsexperience)
==== 4.3 syntax.php ====
Für eine eigene Syntax (also neue software ‑Konstrukte) braucht man eine syntax.php.
Darin steckt eine PHP‑Klasse, die von DokuWiki_Syntax_Plugin erbt.
===== 5. Das konkrete Plugin vhsexperience =====
==== 5.1 Ordnerstruktur ====
''lib/
plugins/
vhsexperience/
plugin.info.txt
syntax.php''
==== 5.2 Der ursprüngliche Fehler: Ungültiger Pluginname ====
Du hattest zuerst den Ordner so genannt:
''lib/plugins/vhs_experience/''
DokuWiki meldete:
Plugin name 'vhs_experience' is not a valid plugin name, only the characters a-z and 0-9 are allowed.
Das bedeutet:
- der Unterstrich
_ist nicht erlaubt - DokuWiki kann das Plugin so nicht korrekt registrieren
Die Lösung war:
- Ordner umbenennen in
vhsexperience baseinplugin.info.txtaufvhsexperiencesetzen- Klassenname und Registrierung in
syntax.phpanpassen
===== 6. Funktionsweise des Plugins im Detail =====
Hier die zentrale Datei syntax.php in verständlicher Form erklärt.
==== 6.1 Grundgerüst der Klasse ====
''class syntax_plugin_vhsexperience extends DokuWiki_Syntax_Plugin {
// ...
}''
* syntax_plugin_ + vhsexperience → muss zum Plugin‑Namen passen
- Die Klasse sagt: „Ich bin ein Syntax‑Plugin“
==== 6.2 Typ und Verhalten ====
''public function getType() {
return 'substition';
}
public function getPType() {
return 'normal';
}
public function getSort() {
return 155;
}''
* getType(): substition bedeutet, dass ein Platzhalter durch Inhalt ersetzt wird
- getPType():
normal→ normales Verhalten im Textfluss - getSort(): Reihenfolge, in der das Plugin im Vergleich zu anderen Syntax‑Plugins verarbeitet wird
==== 6.3 Erkennen der eigenen Syntax ====
''public function connectTo($mode) {
$this->Lexer->addSpecialPattern('\{\{vhsexperience>.*?\}\}', $mode, 'plugin_vhsexperience');
}''
* Hier wird DokuWiki gesagt:
„Wenn du im Text etwas findest, das aussieht wie ''{{vhsexperience>...}}'', dann bin ich zuständig.“
- Die Regex
\{ \{vhsexperience>.*?\}\}bedeutet: Ungültiges Datumam Ende
==== 6.4 Zerlegen der Syntax: handle() ====
''public function handle($match, $state, $pos, Doku_Handler $handler) {
// Entferne {{vhsexperience> und }}
$match = trim(substr($match, 17, -2));
return array('startdate' => $match);
}''
* $match enthält z. B.:
''{{vhsexperience>2010-09-01}}''
substr($match, 17, -2)schneidet vorneUngültiges Datumab
Übrig bleibt:
''2010-09-01''
Das wird als startdate zurückgegeben und später im render() verwendet
==== 6.5 Ausgabe erzeugen: render() ====
''public function render($mode, Doku_Renderer $renderer, $data) {
if($mode != 'xhtml') return false;
$start = strtotime($data['startdate']);
if(!$start) {
$renderer->doc .= '<span class="error">Ungültiges Datum</span>';
return true;
}
$now = time();
// Berechnung der vollen Jahre
$years = date('Y', $now) - date('Y', $start);
// Falls Startdatum im Jahr noch nicht erreicht → 1 Jahr abziehen
$anniversary = strtotime(date('Y', $now) . '-' . date('m-d', $start));
if($now <$anniversary) {
$years--;
}
$renderer->doc .= $years . ' Jahre';
return true;
}
''
Schritt für Schritt:
Modus prüfen
''if($mode != 'xhtml') return false;''
* Nur im HTML‑Rendermodus wird etwas ausgegeben
- Andere Modi (z. B. für RSS, Text, etc.) werden ignoriert
Startdatum einlesen
''$start = strtotime($data['startdate']);
if(!$start) {
$renderer->doc .= '<span class="error">Ungültiges Datum</span>';
return true;
}''
* strtotime() wandelt den String 2010-09-01 in einen Unix‑Zeitstempel um
- Wenn das nicht klappt → Fehlermeldung „Ungültiges Datum“
Aktuelles Datum holen
''$now = time();''
Jahresdifferenz berechnen
''$years = date('Y', $now) - date('Y', $start);''
* z. B. 2026 - 2010 = 16
Prüfen, ob der Jahrestag schon war
''$anniversary = strtotime(date('Y', $now) . '-' . date('m-d', $start));
if($now <$anniversary) {
$years--;
}
''
Idee:
date('m-d', $start)→ Monat und Tag des Startdatums, z. B.09-01date('Y', $now)→ aktuelles Jahr, z. B.2026- Zusammengesetzt:
2026-09-01= Jahrestag im aktuellen Jahr - Wenn heute (
$now) vor diesem Jahrestag liegt → ein Jahr abziehen
Beispiel: * Start: 2010‑09‑01
- Heute: 2026‑04‑14
- Jahrestag 2026: 2026‑09‑01
- Heute < Jahrestag →
years–→ aus 16 wird 15 -
Ausgabe erzeugen
''$renderer->doc .= $years . ' Jahre';''
* Das ist der Text, der später im HTML‑Dokument erscheint
- Beispiel:
15 Jahre
===== 7. Verwendung im Wiki =====
Für deine Schüler ist die Nutzung dann sehr einfach:
''{{vhsexperience>2010-09-01}}''
Ergebnis (Stand April 2026):
''15 Jahre''
Eingebettet in einen Satz:
''Erfahrung: {{vhsexperience>2010-09-01}} Unterricht bei der VHS.''
→
''Erfahrung: 15 Jahre Unterricht bei der VHS.''
===== 8. Didaktische Kernaussagen für deine Schüler =====
Ziel: Wiederkehrende Angaben (z. B. „X Jahre Erfahrung“) sollen nicht manuell gepflegt werden müssen.
Fertige Plugins wie date oder year können das teilweise, sind aber:
- manchmal nicht installiert
- manchmal nicht kompatibel
- teilweise eingeschränkt in der Funktion
Eigenes Plugin:
- gibt dir volle Kontrolle
- ist klein, überschaubar und gut dokumentierbar
- zeigt exemplarisch, wie DokuWiki‑Syntax‑Plugins funktionieren
Wichtige technische Punkte:
- Plugin‑Ordnername: nur
a-zund0-9 baseinplugin.info.txt= Ordnername- Klassenname
syntax_plugin_<name>muss zum Plugin passen connectTo()registriert die Syntaxhandle()zerlegt die Eingaberender()erzeugt die Ausgabe

Diskussion