Benutzer-Werkzeuge

Webseiten-Werkzeuge


secrets-offen:software:willkommen

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)

.: Warum DokuWiki? :.

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



.: Anwendungsfälle DokuWiki :.

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



.: DokuWiki anpassen :.

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



.: Unsere Gemeinschaft :.

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



.: Urheberrecht :.

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 spendenwink.

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

.: automatische Jahre… :.

==== Ü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 = Startdatum
  • now = aktuelles Datum
  • years = 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: vhsexperience 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:

  • 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:

  • 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:

  • der Unterstrich _ ist nicht erlaubt
  • DokuWiki kann das Plugin so nicht korrekt registrieren

Die Lösung war:

  • Ordner umbenennen in vhsexperience
  • base in plugin.info.txt auf vhsexperience setzen
  • Klassenname und Registrierung in syntax.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

  • 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 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

  • 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-01
  • date('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-z und 0-9
  • base in plugin.info.txt = Ordnername
  • Klassenname syntax_plugin_<name> muss zum Plugin passen
  • connectTo() registriert die Syntax
  • handle() zerlegt die Eingabe
  • render() erzeugt die Ausgabe

Diskussion

Gib Deinen Kommentar ein. Wiki-Syntax ist zugelassen:
Bitte gib alle Buchstaben in das Eingabefeld ein um zu zeigen dass du ein Mensch bist. Q M R R C
 
secrets-offen/software/willkommen.txt · Zuletzt geändert: von roland

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki