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...
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 ist eine beliebte Wahl bei der Wahl einer Wiki-Software und bietet viele Vorteile gegenüber ähnlicher Software.
— 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:
— 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.
— 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.
— 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
==== Ü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:
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 JahrenErwartetes 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:
... nicht erkannt wurdeZusä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:
Also z. B. im Jahr 2026:
''{{year>2010}} → 16''
Eingebettet:
''Erfahrung: {{year>2010}} Jahre Unterricht bei der VHS.''
Vorteil:
Nachteil:
===== 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:
''{{vhsexperience>2010-09-01}}''
''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 enthaltenvhsexperience ist gültig, vhs_experience ist ungültig==== 4.2 plugin.info.txt ====
In jedem Plugin‑Ordner liegt eine Datei plugin.info.txt, die DokuWiki sagt:
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:
base muss 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:
_ ist nicht erlaubtDie Lösung war:
vhsexperiencebase in plugin.info.txt auf vhsexperience setzensyntax.php anpassen===== 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
==== 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
normal → normales Verhalten im Textfluss==== 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.“
\{ \{vhsexperience>.*?\}\} bedeutet:Ungültiges Datum am 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 vorne Ungültiges Datum abÜ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
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
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. 20262026-09-01 = Jahrestag im aktuellen Jahr$now) vor diesem Jahrestag liegt → ein Jahr abziehenBeispiel: * Start: 2010‑09‑01
years– → aus 16 wird 15 -Ausgabe erzeugen
''$renderer->doc .= $years . ' Jahre';''
* Das ist der Text, der später im HTML‑Dokument erscheint
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:
Eigenes Plugin:
Wichtige technische Punkte:
a-z und 0-9base in plugin.info.txt = Ordnernamesyntax_plugin_<name> muss zum Plugin passenconnectTo() registriert die Syntaxhandle() zerlegt die Eingaberender() erzeugt die Ausgabe