Weisheit des Tages:
22.04.2026
" Wie die Samen, die unter der Schneedecke träumen, träumen eure Herzen vom Frühling. Vertraut diesen Träumen, denn in ihnen verbirgt sich das Tor zur Unendlichkeit."
– Khalil Gibran (1883–1931)
433 mal angezeigt.
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung | |||
| projekt-offen:software:dokuwiki [26-05-2025 13:16] – roland | projekt-offen:software:dokuwiki [21-04-2026 17:42] (aktuell) – roland | ||
|---|---|---|---|
| Zeile 160: | Zeile 160: | ||
| {{tag> | {{tag> | ||
| + | |||
| + | ====== DokuWiki ====== | ||
| + | |||
| + | DokuWiki ist eine einfach zu bedienende und äußerst vielseitige [[https:// | ||
| + | |||
| + | Es wird von den Nutzern wegen seiner sauberen und lesbaren [[https:// | ||
| + | |||
| + | ==== DokuWiki (Erklährung) ==== | ||
| + | |||
| + | < | ||
| + | < | ||
| + | |||
| + | * 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 (!) | ||
| + | |||
| + | — // | ||
| + | |||
| + | ---- | ||
| + | |||
| + | {{tag> | ||
| + | |||
| + | ---- | ||
| + | |||
| + | < | ||
| + | |||
| + | 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 | ||
| + | |||
| + | — // | ||
| + | |||
| + | ---- | ||
| + | |||
| + | | ||
| + | |||
| + | ---- | ||
| + | |||
| + | < | ||
| + | |||
| + | 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. | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | — // | ||
| + | |||
| + | ---- | ||
| + | |||
| + | | ||
| + | |||
| + | ---- | ||
| + | |||
| + | < | ||
| + | < | ||
| + | |||
| + | * Teilen Sie Ihre Erfahrungen mit | ||
| + | * Mach ein bisschen Wiki-Gartenarbeit | ||
| + | * Helfen Sie Plugin-Autoren mit Dokumentation | ||
| + | * [[http:// | ||
| + | * Bugs und Feature-Wünsche einreichen | ||
| + | * [[http:// | ||
| + | |||
| + | — // | ||
| + | |||
| + | ---- | ||
| + | |||
| + | | ||
| + | |||
| + | ---- | ||
| + | |||
| + | < | ||
| + | |||
| + | 2004-2025 © Andreas Gohr [[: | ||
| + | |||
| + | Die DokuWiki-Engine ist unter [[http:// | ||
| + | Wenn du DokuWiki in deinem Unternehmen nutzt, solltest du ein paar Euro [[https:// | ||
| + | |||
| + | Ich bin mir nicht sicher, was das bedeutet? Siehe die [[https:// | ||
| + | |||
| + | ---- | ||
| + | |||
| + | < | ||
| + | |||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Spezial-Programmierungen ===== | ||
| + | |||
| + | < | ||
| + | |||
| + | ==== Überblick: Was war das Ziel? ==== | ||
| + | |||
| + | Du wolltest in deiner DokuWiki‑Seite einen Satz wie | ||
| + | |||
| + | < | ||
| + | |||
| + | 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** | ||
| + | * und diese Zahl im Text anzeigen | ||
| + | |||
| + | Beispiel: | ||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | statt: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== 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.: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | Die Idee dahinter: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | Erwartetes Ergebnis wäre z. B.: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | oder eingebettet: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== 1.2 Warum das bei dir nicht funktioniert hat ==== | ||
| + | |||
| + | In deinem Wiki wurde der Ausdruck aber **nicht berechnet**, | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | Das ist ein typisches Zeichen dafür, dass: | ||
| + | |||
| + | * die äußere Plugin‑Syntax '' | ||
| + | * das Plugin **nicht installiert oder nicht geladen** | ||
| + | * 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, | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== 2. Alternative: | ||
| + | |||
| + | Eine einfachere Alternative ist das **Year‑Plugin**, | ||
| + | |||
| + | Beispiel: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | Das berechnet: | ||
| + | |||
| + | * aktuelles Jahr – 2010 | ||
| + | |||
| + | Also z. B. im Jahr 2026: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | Eingebettet: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | **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** | ||
| + | |||
| + | Ziel: | ||
| + | |||
| + | * Syntax im Wiki: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | * Ausgabe im HTML: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== 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: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | Wichtig: | ||
| + | |||
| + | * ''< | ||
| + | * **keine Unterstriche**, | ||
| + | * Beispiel: '' | ||
| + | |||
| + | ==== 4.2 plugin.info.txt ==== | ||
| + | |||
| + | In jedem Plugin‑Ordner liegt eine Datei '' | ||
| + | * wie das Plugin heißt | ||
| + | * wer der Autor ist | ||
| + | * wofür es gedacht ist | ||
| + | |||
| + | Beispiel: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | author Roland | ||
| + | email - | ||
| + | name VHS Experience Plugin | ||
| + | desc | ||
| + | url https:// | ||
| + | version 2026-04-14'' | ||
| + | |||
| + | </ | ||
| + | |||
| + | Wichtig: | ||
| + | |||
| + | * '' | ||
| + | ==== 4.3 syntax.php ==== | ||
| + | |||
| + | Für eine eigene Syntax (also neue '' | ||
| + | Darin steckt eine PHP‑Klasse, | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== 5. Das konkrete Plugin vhsexperience ===== | ||
| + | |||
| + | ==== 5.1 Ordnerstruktur ==== | ||
| + | < | ||
| + | |||
| + | '' | ||
| + | plugins/ | ||
| + | vhsexperience/ | ||
| + | | ||
| + | syntax.php'' | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== 5.2 Der ursprüngliche Fehler: Ungültiger Pluginname ==== | ||
| + | |||
| + | Du hattest zuerst den Ordner so genannt: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | DokuWiki meldete: | ||
| + | |||
| + | < | ||
| + | |||
| + | Das bedeutet: | ||
| + | |||
| + | * der Unterstrich '' | ||
| + | * DokuWiki kann das Plugin so nicht korrekt registrieren | ||
| + | |||
| + | Die Lösung war: | ||
| + | |||
| + | * Ordner umbenennen in '' | ||
| + | * '' | ||
| + | * Klassenname und Registrierung in '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== 6. Funktionsweise des Plugins im Detail ===== | ||
| + | |||
| + | Hier die zentrale Datei '' | ||
| + | |||
| + | ==== 6.1 Grundgerüst der Klasse ==== | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | // ... | ||
| + | }'' | ||
| + | |||
| + | </ | ||
| + | |||
| + | * '' | ||
| + | * Die Klasse sagt: „Ich bin ein Syntax‑Plugin“ | ||
| + | |||
| + | ==== 6.2 Typ und Verhalten ==== | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | return ' | ||
| + | } | ||
| + | |||
| + | public function getPType() { | ||
| + | return ' | ||
| + | } | ||
| + | |||
| + | public function getSort() { | ||
| + | return 155; | ||
| + | }'' | ||
| + | |||
| + | </ | ||
| + | |||
| + | * **getType()**: | ||
| + | * **getPType()**: | ||
| + | * **getSort()**: | ||
| + | ==== 6.3 Erkennen der eigenen Syntax ==== | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | $this-> | ||
| + | }'' | ||
| + | |||
| + | </ | ||
| + | |||
| + | * Hier wird DokuWiki gesagt: | ||
| + | |||
| + | < | ||
| + | „Wenn du im Text etwas findest, das aussieht wie '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | * Die Regex '' | ||
| + | * '' | ||
| + | ==== 6.4 Zerlegen der Syntax: handle() ==== | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | // Entferne {{vhsexperience> | ||
| + | $match = trim(substr($match, | ||
| + | return array(' | ||
| + | }'' | ||
| + | |||
| + | </ | ||
| + | |||
| + | * '' | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | * '' | ||
| + | * | ||
| + | |||
| + | Übrig bleibt: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | * | ||
| + | |||
| + | Das wird als '' | ||
| + | |||
| + | ==== 6.5 Ausgabe erzeugen: render() ==== | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | if($mode != ' | ||
| + | $start = strtotime($data[' | ||
| + | if(!$start) { | ||
| + | | ||
| + | return true; | ||
| + | } | ||
| + | |||
| + | $now = time(); | ||
| + | |||
| + | // Berechnung der vollen Jahre | ||
| + | $years = date(' | ||
| + | |||
| + | // Falls Startdatum im Jahr noch nicht erreicht → 1 Jahr abziehen | ||
| + | $anniversary = strtotime(date(' | ||
| + | if($now < | ||
| + | $years--; | ||
| + | } | ||
| + | |||
| + | $renderer-> | ||
| + | return true; | ||
| + | } | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | Schritt für Schritt: | ||
| + | |||
| + | - | ||
| + | |||
| + | **Modus prüfen** | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | * Nur im HTML‑Rendermodus wird etwas ausgegeben | ||
| + | |||
| + | * Andere Modi (z. B. für RSS, Text, etc.) werden ignoriert | ||
| + | |||
| + | - | ||
| + | |||
| + | **Startdatum einlesen** | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | if(!$start) { | ||
| + | $renderer-> | ||
| + | return true; | ||
| + | }'' | ||
| + | |||
| + | </ | ||
| + | |||
| + | * '' | ||
| + | * Wenn das nicht klappt → Fehlermeldung „Ungültiges Datum“ | ||
| + | |||
| + | - | ||
| + | |||
| + | **Aktuelles Datum holen** | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | - | ||
| + | |||
| + | **Jahresdifferenz berechnen** | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | * z. B. '' | ||
| + | - | ||
| + | |||
| + | **Prüfen, ob der Jahrestag schon war** | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | if($now < | ||
| + | $years--; | ||
| + | } | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | Idee: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * Zusammengesetzt: | ||
| + | * Wenn **heute** | ||
| + | |||
| + | Beispiel: * Start: 2010‑09‑01 | ||
| + | |||
| + | * Heute: 2026‑04‑14 | ||
| + | * Jahrestag 2026: 2026‑09‑01 | ||
| + | * Heute < Jahrestag → '' | ||
| + | |||
| + | **Ausgabe erzeugen** | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | * Das ist der Text, der später im HTML‑Dokument erscheint | ||
| + | |||
| + | * Beispiel: '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== 7. Verwendung im Wiki ===== | ||
| + | |||
| + | Für deine Schüler ist die Nutzung dann sehr einfach: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | Ergebnis (Stand April 2026): | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | Eingebettet in einen Satz: | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | → | ||
| + | |||
| + | < | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== 8. Didaktische Kernaussagen für deine Schüler ===== | ||
| + | |||
| + | * | ||
| + | |||
| + | **Ziel: | ||
| + | * | ||
| + | |||
| + | **Fertige Plugins** | ||
| + | * 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, | ||
| + | |||
| + | **Wichtige technische Punkte:** | ||
| + | * Plugin‑Ordnername: | ||
| + | * '' | ||
| + | * Klassenname '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | </ | ||
