ki:edwiki:plugin:leitfaden
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
| ki:edwiki:plugin:leitfaden [2026/10/11 09:04] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ki:edwiki:plugin:leitfaden [2026/10/11 09:04] (aktuell) – ↷ Seite von ki:edwiki:plugin-leitfaden nach ki:edwiki:plugin:leitfaden verschoben und umbenannt nemwar | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | Zurück: [[ki: | ||
| + | |||
| + | ====== DokuWiki-Plugin-Leitfaden (edwiki 2.0) ====== | ||
| + | |||
| + | > Arbeitsgrundlage für Claude bei jeder DokuWiki-Plugin-Arbeit in diesem Projekt (structauto u. a.). Angepasst aus **tracker-user/ | ||
| + | |||
| + | ===== 1. Umgebung (Oliver) ===== | ||
| + | |||
| + | * **Entwicklung/ | ||
| + | * **Produktiv: | ||
| + | * **DokuWiki-Version: | ||
| + | * **PHP:** Ziel 8.x – exakte Untergrenze ('' | ||
| + | * **Lokale Dev-Maschine: | ||
| + | * **Browser-Untergrenze: | ||
| + | * **Sprachen: | ||
| + | * **Debugging ohne Logs:** '' | ||
| + | |||
| + | ===== 2. Arbeitsweise ===== | ||
| + | |||
| + | * **Erst planen, dann coden:** Idee/Plan besprechen, Code erst nach ausdrücklicher Freigabe („leg los“). | ||
| + | * **Nicht raten, nachschlagen: | ||
| + | * **Nach Änderungen an JS/ | ||
| + | * **Zeilenenden: | ||
| + | |||
| + | ===== 3. Plugin-Aufbau ===== | ||
| + | |||
| + | < | ||
| + | < | ||
| + | ├── plugin.info.txt | ||
| + | ├── syntax.php | ||
| + | ├── action.php | ||
| + | ├── admin.php | ||
| + | ├── helper.php | ||
| + | ├── renderer.php / remote.php / auth.php / cli.php | ||
| + | ├── < | ||
| + | ├── script.js / style.css | ||
| + | ├── conf/ | ||
| + | ├── conf/ | ||
| + | ├── lang/< | ||
| + | ├── lang/< | ||
| + | └── deleted.files | ||
| + | </ | ||
| + | |||
| + | **Benennung: | ||
| + | |||
| + | **Basisklassen** ('' | ||
| + | |||
| + | ===== 4. PHP-Konventionen ===== | ||
| + | |||
| + | **Pflicht** | ||
| + | |||
| + | * '' | ||
| + | * Sichtbarkeit immer explizit; '' | ||
| + | * Kein schließendes '' | ||
| + | * Docblocks ('' | ||
| + | * Eingaben nur über '' | ||
| + | * Seiten-IDs mit '' | ||
| + | * Dateien: '' | ||
| + | * JSON speichern mit '' | ||
| + | |||
| + | **Stil:** '' | ||
| + | |||
| + | **Rechte-Muster: | ||
| + | |||
| + | ===== 5. JS & CSS ===== | ||
| + | |||
| + | * Vanilla JS, kein Framework. AJAX per '' | ||
| + | * Alle Bundles laden '' | ||
| + | * JSINFO-Werte im Action-Plugin bei '' | ||
| + | * CSS: DokuWiki-Platzhalter ('' | ||
| + | * **Plugin-CSS/ | ||
| + | * **Stolperfalle LESS:** Alles CSS läuft durch lesserphp. '' | ||
| + | |||
| + | ===== 6. DokuWiki-API kompakt ===== | ||
| + | |||
| + | **Syntax-Plugins** | ||
| + | |||
| + | * '' | ||
| + | * Patterns: '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * **Seiten-Flags** (z. B. „diese Seite hat eine Infobox“) im // | ||
| + | * '' | ||
| + | |||
| + | **Events** | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * Häufige Events: '' | ||
| + | * Externe Bibliotheken im Konstruktor oder bei Bedarf laden, **nie** am Dateianfang. Konstruktoren von Syntax-Plugins laufen bei jedem Parse – keine Seiteneffekte dort. | ||
| + | |||
| + | **Konfiguration ('' | ||
| + | |||
| + | **Lokalisierung: | ||
| + | |||
| + | **Caching & Metadaten** | ||
| + | |||
| + | * Cache nicht pauschal abschalten – Abhängigkeiten per '' | ||
| + | * **Wichtig für structauto: | ||
| + | * '' | ||
| + | |||
| + | **Globale & Konstanten: | ||
| + | |||
| + | **Formulare: | ||
| + | |||
| + | ===== 7. Sicherheit (die teuersten Lektionen) ===== | ||
| + | |||
| + | - **Escapen: | ||
| + | - **Attribut-Injection – häufigste XSS-Ursache in Syntax-Plugins: | ||
| + | - **Struct-Werte sind Nutzereingaben: | ||
| + | - **Regex-Nachbearbeitung von HTML** (z. B. '' | ||
| + | - **Daten ins Inline-'' | ||
| + | - **JS:** Fremddaten (AJAX-Antworten) mit '' | ||
| + | - **HTML-Kommentare: | ||
| + | - **CSRF ≠ Berechtigung: | ||
| + | - **Keine eigenständigen PHP-Skripte**, | ||
| + | - **Keine Stacktraces/ | ||
| + | - **Ausnahme Editor-Round-Trip: | ||
| + | |||
| + | ===== 8. Review-Checkliste ===== | ||
| + | |||
| + | - Fatale Fehler auf aktueller DokuWiki-Version (Namespace-Änderungen) | ||
| + | - DOKU_INC-Guard auf Logik-Dateien (nicht conf/lang) | ||
| + | - Sichtbarkeit auf allen Methoden, '' | ||
| + | - Docblocks auf public/ | ||
| + | - Keine '' | ||
| + | - Globales JS/CSS nur wenn nötig, sonst bedingt laden | ||
| + | - Datei-Schreibzugriffe korrekt gelockt (nie '' | ||
| + | - Alle Ausgaben escaped ('' | ||
| + | - Null-Sicherheit bei Array-Zugriffen ('' | ||
| + | - '' | ||
| + | - Keine Debug-Reste, | ||
| + | - CSRF-Token **und** ACL-Prüfung bei zustandsändernden Aktionen | ||
| + | - URLs '' | ||
| + | - '' | ||
| + | - Übersetzungen '' | ||
| + | - README stimmt mit Code überein (Code hat Vorrang) | ||
| + | |||
| + | ===== 9. Häufige Stolperfallen ===== | ||
| + | |||
| + | * **Cache-Buster: | ||
| + | * **Metadaten-Cache: | ||
| + | * **'' | ||
| + | * **'' | ||
| + | * **'' | ||
| + | * **Admin-Tabellen mit Zeilen-Buttons: | ||
| + | |||
| + | ===== 10. plugin.info.txt & Veröffentlichung ===== | ||
| + | |||
| + | * Eigene Plugins: '' | ||
| + | * Repo-Schema: | ||
| + | * Plugin-Seite auf dokuwiki.org: | ||
| + | * Vorlagen dafür: '' | ||
| + | * WYSIWYG (ProseMirror-Editor)-Unterstützung bei Bedarf: '' | ||
| + | |||
| + | ===== 11. Tests (optional) ===== | ||
| + | |||
| + | Nur wenn beim Review ohnehin nötig: '' | ||
