βοΈ Sternzeichen des Tages: LΓΆwe 03.08.2026 - βΌ (hier Klicken zum Γffnen) βΌ
π Weitere Infos
- Bescheiden bleiben β nicht ΓΌberheblich wirken
- ZuhΓΆren β auch andere Meinungen gelten lassen
- Teamplayer sein β den Erfolg teilen
- SchwΓ€chen zeigen β niemand ist perfekt
- Kompromisse suchen β den Partner miteinbeziehen
- Entspannen β nicht immer Vollgas geben
- Fehler verzeihen β nachsichtig mit sich sein
- GenΓΌgsam bleiben β GlΓΌck kommt von Innen
- FΓΌr andere da sein β nicht nur an sich denken
- Neues wagen β ΓΌber den Tellerrand blicken
π‘ Weisheit des Tages ... vom: 03.08.2026 - βΌ (hier Klicken zum Γffnen) βΌ
π Kurzbiografie
Inhaltsverzeichnis
Projekt: DokuWiki
Unternehmens-Wiki: Was man bei der EinfΓΌhrung eines Firmenwikis beachten mussβ¦
===== EinfΓΌhrung und Realisierung eines Unternehmens-Wiki =====
Hier noch zwei YouTube-Videos zur Handhabung...
Webserver/htaccess/Passwortschutz
Webserver/htaccess
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Γ€rung)
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

Verbesserung? Lass es uns wissen. Deine Meinung zΓ€hlt: