Benutzer-Werkzeuge

Webseiten-Werkzeuge


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.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
projekt-offen:software:dokuwiki [26-05-2025 13:16] rolandprojekt-offen:software:dokuwiki [21-04-2026 17:42] (aktuell) roland
Zeile 160: Zeile 160:
  
 {{tag>[Projekt DokuWiki ] }} {{tag>[Projekt DokuWiki ] }}
 +
 +====== DokuWiki ======
 +
 +DokuWiki ist eine einfach zu bedienende und äußerst vielseitige [[https://en.wikipedia.org/wiki/wiki software|Open-Source-Wiki-Software]], die keine Datenbank benötigt.
 +
 +Es wird von den Nutzern wegen seiner sauberen und lesbaren [[https://www.dokuwiki.org/wiki:syntax|Syntax]] geliebt. Die einfache Wartung, Sicherung und Integration machen es zu einem Favoriten für Administratoren. Eingebaute [[https://www.dokuwiki.org/acl|Zugriffskontrollen]] und [[https://www.dokuwiki.org/auth|Authentifizierungs-Connectoren]] machen DokuWiki besonders nützlich im Unternehmenskontext, und die große Anzahl von [[https://www.dokuwiki.org/plugins|Plugins]] der lebendigen Community ermöglicht eine breite Palette von Anwendungsfällen jenseits eines traditionellen Wikis.
 +
 +==== DokuWiki (Erklährung) ====
 +
 +<accordion autoclose> <accordion-item title=".: Warum DokuWiki? :.">
 + <font 14px/Arial, sans-serif;;initial;;#ffffff>DokuWiki ist eine beliebte Wahl bei der Wahl einer Wiki-Software und bietet viele Vorteile gegenüber ähnlicher Software.</font>
 +
 +  * 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@EURoBa.de|Roland Otto]] 2026/04/14 20:30//</accordion-item>
 +
 +----
 +
 +{{tag>["DUKUWIKI"]}}
 +
 +----
 +
 +<accordion-item title=".: 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@EURoBa.de|Roland Otto]] 2026/04/14 20:30//</accordion-item>
 +
 +----
 +
 + {{tag>["DUKUWIKI"]}}
 +
 +----
 +
 +<accordion-item title=".: 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.
 +
 +  * [[https://www.dokuwiki.org/config|Konfiguration]]
 +  * [[https://www.dokuwiki.org/plugins|Plugins]]
 +  * [[https://www.dokuwiki.org/template|Vorlagen]] (auch Skins/Themen genannt)
 +  * [[https://www.dokuwiki.org/design_examples|Designbeispiele]]
 +  * [[https://www.dokuwiki.org/tips|Tipps und Tricks]]
 +
 +— //[[Roland@EURoBa.de|Roland Otto]] 2026/04/14 20:30//</accordion-item>
 +
 +----
 +
 + {{tag>["DUKUWIKI"]}}
 +
 +----
 +
 +<accordion-item title=".: Unsere Gemeinschaft :.">
 + <font 14px/Arial, sans-serif;;initial;;#ffffff>Ein Teil von OpenSource ist, der Community etwas zurückzugeben, indem man sich engagiert. Es gibt zahlreiche Möglichkeiten, dies zu tun.</font>
 +
 +  * Teilen Sie Ihre Erfahrungen mit
 +  * Mach ein bisschen Wiki-Gartenarbeit
 +  * Helfen Sie Plugin-Autoren mit Dokumentation
 +  * [[http://translate.dokuwiki.org/|Hilfe bei der Übersetzung der DokuWiki-Benutzeroberfläche]]
 +  * Bugs und Feature-Wünsche einreichen
 +  * [[http://forum.dokuwiki.org/|Beantworten Sie Fragen im Forum]]
 +
 +— //[[Roland@EURoBa.de|Roland Otto]] 2026/04/14 20:30//</accordion-item>
 +
 +----
 +
 + {{tag>["DUKUWIKI"]}}
 +
 +----
 +
 +<accordion-item title=".: Urheberrecht :.">
 +
 +2004-2025 © Andreas Gohr [[:secrets-offen:software:andi_at_splitbrain_dot_org|andi [at] splitbrain [dot] org]]<sup>[[https://www.dokuwiki.org/dokuwiki#fn__1|1)]]</sup>   und die DokuWiki-Community
 +
 +Die DokuWiki-Engine ist unter [[http://www.gnu.org/licenses/gpl.html|GNU General Public License]] Version 2 lizenziert. \\
 +Wenn du DokuWiki in deinem Unternehmen nutzt, solltest du ein paar Euro [[https://www.dokuwiki.org/donate|spenden]]{{https://euroba.de/lib/plugins/ckgedit/ckeditor/plugins/smiley/images/wink_smile.png?nolink&22x22|wink}}.
 +
 +Ich bin mir nicht sicher, was das bedeutet? Siehe die [[https://www.dokuwiki.org/faq:license|FAQ zu den Lizenzen]].
 +
 +----
 +
 +<sup>[[https://www.dokuwiki.org/dokuwiki#fnt__1|1)]]</sup>   Bitte kontaktieren Sie mich nicht für Hilfe und Unterstützung – nutzen Sie stattdessen die [[https://www.dokuwiki.org/mailinglist|Mailingliste]] oder das [[http://forum.dokuwiki.org/|Forum]]
 +
 +</accordion-item> </accordion>
 +
 +----
 +
 + {{tag>["DUKUWIKI"]}}
 +
 +----
 +
 +----
 +
 +----
 +
 +===== Spezial-Programmierungen =====
 +
 +<accordion autoclose> <accordion-item title=".: automatische Jahre… :.">
 +
 +==== Überblick: Was war das Ziel? ====
 +
 +Du wolltest in deiner DokuWiki‑Seite einen Satz wie
 +
 +<blockquote>"Erfahrung von über 15 Jahren Unterricht bei der VHS."</blockquote>
 +
 +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:
 +<code>
 +
 +''Erfahrung: 15 Jahre Unterricht bei der VHS.''
 +
 +</code>
 +
 +statt:
 +
 +<code>
 +''Erfahrung: {{vhsexperience>2010-09-01}}''
 +
 +</code>
 +
 +----
 +
 +===== 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.:
 +
 +<code>
 +''{{date>diff:2010-09-01:now:years}}''
 +
 +</code>
 +
 +Die Idee dahinter:
 +
 +  * ''2010-09-01''  = Startdatum
 +  * ''now''  = aktuelles Datum
 +  * ''years''  = Ausgabe in Jahren
 +Erwartetes Ergebnis wäre z. B.:
 +
 +<code>
 +''15''
 +
 +</code>
 +
 +oder eingebettet:
 +
 +<code>
 +''Erfahrung: {{date>diff:2010-09-01:now:years}} Jahre Unterricht bei der VHS.''
 +
 +</code>
 +
 +==== 1.2 Warum das bei dir nicht funktioniert hat ====
 +
 +In deinem Wiki wurde der Ausdruck aber **nicht berechnet**, sondern quasi „auseinandergerissen“ angezeigt, etwa so:
 +
 +<code>
 +''Erfahrung: diff:2010-09-01:now:years Jahre Unterricht bei der VHS.''
 +
 +</code>
 +
 +Das ist ein typisches Zeichen dafür, dass:
 +
 +  * die äußere Plugin‑Syntax ''{{date>...}}'' **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:
 +
 +<code>
 +''{{year>2010}}''
 +
 +</code>
 +
 +Das berechnet:
 +
 +  * aktuelles Jahr – 2010
 +
 +Also z. B. im Jahr 2026:
 +
 +<code>
 +''{{year>2010}}  →  16''
 +
 +</code>
 +
 +Eingebettet:
 +
 +<code>
 +''Erfahrung: {{year>2010}} Jahre Unterricht bei der VHS.''
 +
 +</code>
 +
 +**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:
 +
 +<code>
 +''{{vhsexperience>2010-09-01}}''
 +
 +</code>
 +
 +  * Ausgabe im HTML:
 +
 +<code>
 +''15 Jahre''
 +
 +</code>
 +
 +----
 +
 +===== 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:
 +
 +<code>
 +''lib/plugins/<pluginname>/''
 +
 +</code>
 +
 +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:
 +
 +<code>
 +''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''
 +
 +</code>
 +
 +Wichtig:
 +
 +  * ''base''  muss **exakt**  dem Ordnernamen entsprechen (''vhsexperience'')
 +==== 4.3 syntax.php ====
 +
 +Für eine eigene Syntax (also neue ''{{:secrets-offen:software|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 ====
 +<code>
 +
 +''lib/
 +  plugins/
 +    vhsexperience/
 +   plugin.info.txt
 +      syntax.php''
 +
 +</code>
 +
 +==== 5.2 Der ursprüngliche Fehler: Ungültiger Pluginname ====
 +
 +Du hattest zuerst den Ordner so genannt:
 +
 +<code>
 +''lib/plugins/vhs_experience/''
 +
 +</code>
 +
 +DokuWiki meldete:
 +
 +<blockquote>Plugin name 'vhs_experience' is not a valid plugin name, only the characters a-z and 0-9 are allowed.</blockquote>
 +
 +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 ====
 +
 +<code>
 +''class syntax_plugin_vhsexperience extends DokuWiki_Syntax_Plugin {
 +    // ...
 +}''
 +
 +</code>
 +
 +* ''syntax_plugin_''  + ''vhsexperience''  → muss zum Plugin‑Namen passen
 +  * Die Klasse sagt: „Ich bin ein Syntax‑Plugin“
 +
 +==== 6.2 Typ und Verhalten ====
 +
 +<code>
 +''public function getType() {
 +    return 'substition';
 +}
 +
 +public function getPType() {
 +    return 'normal';
 +}
 +
 +public function getSort() {
 +    return 155;
 +}''
 +
 +</code>
 +
 +* **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 ====
 +
 +<code>
 +''public function connectTo($mode) {
 +    $this->Lexer->addSpecialPattern('\{\{vhsexperience>.*?\}\}', $mode, 'plugin_vhsexperience');
 +}''
 +
 +</code>
 +
 +* Hier wird DokuWiki gesagt:
 +
 +<code>
 +  „Wenn du im Text etwas findest, das aussieht wie ''{{vhsexperience>...}}'', dann bin ich zuständig.“
 +
 +</code>
 +
 +  * Die Regex ''\{ \{vhsexperience>.*?\}\}''  bedeutet:
 +  * ''{{vhsexperience>'' am Anfang * beliebiger Inhalt ''...'' * ''}}''  am Ende
 +==== 6.4 Zerlegen der Syntax: handle() ====
 +
 +<code>
 +''public function handle($match, $state, $pos, Doku_Handler $handler) {
 +    // Entferne {{vhsexperience> und }}
 +    $match = trim(substr($match, 17, -2));
 +    return array('startdate' => $match);
 +}''
 +
 +</code>
 +
 +* ''$match''  enthält z. B.:
 +
 +<code>
 +''{{vhsexperience>2010-09-01}}''
 +
 +</code>
 +
 +  * ''substr($match, 17, -2)''  schneidet vorne ''{{vhsexperience>'' und hinten ''}}''  ab
 +  *
 +
 +Übrig bleibt:
 +
 +<code>
 +''2010-09-01''
 +
 +</code>
 +
 +  *
 +
 +Das wird als ''startdate''  zurückgegeben und später im ''render()''  verwendet
 +
 +==== 6.5 Ausgabe erzeugen: render() ====
 +
 +<code>
 +''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;
 +}
 +''
 +
 +</code>
 +
 +Schritt für Schritt:
 +
 +  -
 +
 +**Modus prüfen**
 +
 +<code>
 +''if($mode != 'xhtml') return false;''
 +
 +</code>
 +
 +* Nur im HTML‑Rendermodus wird etwas ausgegeben
 +
 +  * Andere Modi (z. B. für RSS, Text, etc.) werden ignoriert
 +
 +  -
 +
 +**Startdatum einlesen**
 +
 +<code>
 +''$start = strtotime($data['startdate']);
 +if(!$start) {
 +    $renderer->doc .= '<span class="error">Ungültiges Datum</span>';
 +    return true;
 +}''
 +
 +</code>
 +
 +* ''strtotime()''  wandelt den String ''2010-09-01''  in einen Unix‑Zeitstempel um
 +  * Wenn das nicht klappt → Fehlermeldung „Ungültiges Datum“
 +
 +  -
 +
 +**Aktuelles Datum holen**
 +
 +<code>
 +''$now = time();''
 +
 +</code>
 +
 +  -
 +
 +**Jahresdifferenz berechnen**
 +
 +<code>
 +''$years = date('Y', $now) - date('Y', $start);''
 +
 +</code>
 +
 +* z. B. ''2026 - 2010 = 16''
 +  -
 +
 +**Prüfen, ob der Jahrestag schon war**
 +
 +<code>
 +''$anniversary = strtotime(date('Y', $now) . '-' . date('m-d', $start));
 +if($now <$anniversary) {
 +    $years--;
 +}
 +''
 +
 +</code>
 +
 +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**
 +
 +<code>
 +''$renderer->doc .= $years . ' Jahre';''
 +
 +</code>
 +
 +* 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:
 +
 +<code>
 +''{{vhsexperience>2010-09-01}}''
 +
 +</code>
 +
 +Ergebnis (Stand April 2026):
 +
 +<code>
 +''15 Jahre''
 +
 +</code>
 +
 +Eingebettet in einen Satz:
 +
 +<code>
 +''Erfahrung: {{vhsexperience>2010-09-01}} Unterricht bei der VHS.''
 +
 +</code>
 +
 +
 +
 +<code>
 +''Erfahrung: 15 Jahre Unterricht bei der VHS.''
 +
 +</code>
 +
 +----
 +
 +===== 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
 +</accordion-item> </accordion>
  
  
Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki