Color scheme: Dark
You are here: start » de » Dokumentation » DokuWiki-Erweiterungen (WvdS) » WvdS Snippet Plugin

WvdS Snippet Plugin

Snippet setzt wiederverwendbare HTML-Bausteine in eine Seite ein – über die Marke {{wk:snippet>kennung}}, unabhängig von der Einstellung htmlok. Ein Snippet wird einmal definiert und überall dort eingesetzt, wo es gebraucht wird. Gedacht ist das Paket für Autoren, die wiederkehrende Blöcke nicht abschreiben wollen, und für Verwalter, die den Bestand an Snippets pflegen.

Erste Schritte

Schnelleinstieg: Ein Snippet anlegen und einbinden – der kürzeste Weg zum ersten Ergebnis, in drei Schritten.

Snippet anlegen → Marke auf einer Seite setzen → Ergebnis prüfen

Häufige Aufgaben

Was Sie wollen Für wen Wo Sie das tun Anleitung
ein Snippet einsetzen Autor Marke {{wk:snippet>kennung}} Syntax
ein Snippet anlegen oder ändern Verwaltung Administration > Snippets Snippet-Definition
ein Snippet mit Werten füllen Autor Parameter der Marke Beispiele
verstehen, warum HTML hier erlaubt ist Verwaltung – Sicherheit
herausfinden, warum ein Snippet leer bleibt Autor – Fehlerbehandlung
ein Snippet aus einem anderen Paket ansprechen Entwickler – Integration
eine Einstellung ändern Verwaltung Konfigurationsmanager Konfiguration

Definition

Das wksnippet Plugin ermöglicht wiederverwendbare HTML-Bausteine (Snippets) mit zentraler Verwaltung. Es bietet eine sichere Alternative zu htmlok und erlaubt die Kombination von HTML mit mehrsprachigen Übersetzungen.

Anwendungsfälle

  • Navigationsmenüs - Hauptmenü, Sidebar-Navigation zentral verwalten
  • Wiederholende Elemente - Footer, Kopfzeilen, Buttons
  • Lokalisierte Komponenten - HTML mit integrierter Mehrsprachigkeit
  • Widget-ähnliche Blöcke - Social Media Links, Kontaktboxen
  • Template-Erweiterungen - Komplexe HTML-Strukturen in Wiki-Seiten

Syntax

{{wk:snippet>key}}

Parameter

Parameter Typ Beschreibung
key string Dateiname des Snippets (ohne .html Extension)
php Zusatz |php optional: PHP-Code im Snippet ausführen – nur unter den Bedingungen im Abschnitt Konfiguration

Snippet-Definition

Datei-basierte Speicherung

Jedes Snippet ist eine eigene HTML-Datei. Das Paket liest zwei Verzeichnisse:

Snippets der Site: <savedir>/wksnippet/ – hierhin schreibt der Verwaltungsbildschirm. Das Verzeichnis liegt neben data/pages, gehört damit zur selben Sicherung und übersteht jede Neuinstallation des Plugins.

Mitgelieferte Snippets: lib/plugins/wksnippet/snippets/ – Vorgaben, die mit dem Plugin kommen; nur lesend, bei jeder Installation ersetzt.

Eigene Snippets gehören nie nach lib/plugins/wksnippet/snippets/. Das Verzeichnis ist Teil des Codes und wird bei jeder Installation oder Aktualisierung des Plugins vollständig ersetzt; ein dort abgelegtes Snippet ist danach verloren.

Dateiformat: {key}.html. Hat ein Snippet der Site denselben Schlüssel wie ein mitgeliefertes, gilt das der Site; wird es gelöscht, gilt wieder das mitgelieferte.

<savedir>/wksnippet/
├── main_menu.html
├── contact_box.html
└── footer.html

lib/plugins/wksnippet/snippets/
├── alert_box.html
├── breadcrumb_separator.html
├── go_back.html
└── social_links.html

Regeln

Regel Beschreibung
Dateiname Entspricht dem Snippet-Key (z.B. main_menu.html → {{wk:snippet>main_menu}})
Inhalt Vollständiger HTML-Code in der Datei
Mehrzeilig Beliebig viele Zeilen möglich
wki18n ... Tags werden verarbeitet
HTML Vollständiges HTML erlaubt

Erlaubte Inhalte

Inhaltstyp Beispiel
HTML-Tags <div>, <nav>, <ul>, etc.
CSS-Klassen class="my-class"
Inline-Styles style="color: red;"
JavaScript onclick="..." (mit Vorsicht)
Font Awesome <i class="fa fa-home"></i>
wki18n Tags Home
Inline-Übersetzungen de:Text|en:Text

Konfiguration

Admin-Einstellungen

Über Admin → Konfiguration → wksnippet:

Einstellung Typ Standard Beschreibung
allowPhp An/Aus Aus PHP-Code in Snippets erlauben (Sicherheitsrisiko!)

PHP-Code in einem Snippet wird nur ausgeführt, wenn drei Bedingungen zugleich erfüllt sind: Die Marke trägt den Zusatz |php ({{wk:snippet>key|php}}), allowPhp ist eingeschaltet, und die DokuWiki-Einstellung phpok ist eingeschaltet. allowPhp gibt die Ausführung für dieses Plugin frei, phpok für das ganze Wiki; keiner der beiden Schalter ersetzt den anderen. Fehlt eine Bedingung, wird der Inhalt unverändert ausgegeben und kein PHP ausgeführt.

Admin-Interface

Über Admin → Snippets können Snippets direkt verwaltet werden:

Funktion Beschreibung
Snippet-Liste Alle verfügbaren Snippets mit Vorschau anzeigen
Snippet bearbeiten HTML-Inhalt im geteilten Editor ändern: links der Quelltext mit HTML-Hervorhebung, rechts die gerenderte, bearbeitbare Vorschau – Baustein htmlSplitEditor() aus wkfluentui (Vertrag). Ansicht umschaltbar (Quelle | Geteilt | Vorschau) und je Benutzer gemerkt. Ohne JavaScript bleibt es eine gewöhnliche Textarea.
Neues Snippet Neuen Snippet-Key erstellen
Snippet löschen Snippet-Datei entfernen (mit Bestätigung)

In der Vorschau erscheint jeder Platzhalter ({{wk:lang>…}}, {{wk:image>…}}) als unteilbarer Chip mit dem vollen Token im Tooltip – er wird byteweise unverändert gespeichert. <style>- und <script>-Blöcke eines Snippets wirken nur innerhalb der Vorschau (Sandbox-iframe ohne Skriptausführung), nicht auf die Admin-Seite.

Eine Bearbeitung in der Vorschau schreibt den Quelltext neu formatiert zurück; ein einzelnes Strg+Z im Quelltextfeld nimmt das zurück. Wer nur links arbeitet, ändert an der Formatierung der Datei nichts.

Beispiel-Snippet (main_menu.html)

Datei: <savedir>/wksnippet/main_menu.html

<nav class="main-menu">
    <ul class="menu-list">
        <li class="menu-item"><a href="?id=start">Home</a></li>
        <li class="menu-item"><a href="?id=docs">Project Documentation</a></li>
        <li class="menu-item"><a href="?id=contact">Contact</a></li>
    </ul>
</nav>

Beispiel-Snippet (go_back.html)

Datei: lib/plugins/wksnippet/snippets/go_back.html

<div class="go-back">
    <i class="fa fa-arrow-left"></i>
    <a href="javascript:history.back()">Go Back</a>
</div>

Beispiele

Beispiel 1: Hauptmenü in Sidebar

Anforderung: Zentrales Navigationsmenü für alle Seiten.

Snippet-Datei: <savedir>/wksnippet/main_menu.html

<nav class="main-menu">
    <ul>
        <li><a href="?id=start">Home</a></li>
        <li><a href="?id=de:docs:start">Project Documentation</a></li>
    </ul>
</nav>

Verwendung in sidebar.txt:

~~NOCACHE~~
{{wk:snippet>main_menu}}

Ergebnis:

  • Menü erscheint auf allen Seiten
  • Übersetzungen werden automatisch angewendet
  • Änderungen über Admin-Interface oder direkt in der Datei

Anforderung: Einheitlicher Zurück-Link in Unter-Namespaces.

Snippet-Datei: <savedir>/wksnippet/go_back.html (überdeckt das mitgelieferte Snippet mit demselben Schlüssel)

<div class="go-back" style="margin-bottom: 1em;">
    <i class="fa fa-arrow-left" style="margin-right: 0.5em;"></i>
    <a href="javascript:history.back()">de:Zurück|en:Back|sl:Nazaj</a>
</div>

Verwendung in sidebar1.txt:

~~NOCACHE~~
{{wk:snippet>go_back}}
{{wk:acmenu}}

Beispiel 3: Kontaktbox

Anforderung: Wiederverwendbare Kontaktinformationen.

Snippet-Datei: <savedir>/wksnippet/contact_box.html

<div class="contact-box">
    <h4>de:Kontakt|en:Contact|sl:Kontakt</h4>
    <p>
        <i class="fa fa-envelope"></i> info@example.com<br>
        <i class="fa fa-phone"></i> +49 123 456789
    </p>
</div>

Verwendung:

{{wk:snippet>contact_box}}

Anforderung: Footer mit dynamischem Jahr und lokalisierten Links.

Snippet-Datei: <savedir>/wksnippet/footer.html

<footer class="site-footer">
    <div class="footer-content">
        <p>&copy; 2026 conf:title</p>
        <nav class="footer-links">
            <a href="?id=impressum">menu_imprint</a> |
            <a href="?id=datenschutz">menu_privacy</a> |
            <a href="?id=sitemap">menu_sitemap</a>
        </nav>
    </div>
</footer>

Funktionsweise

Verarbeitungs-Pipeline

1. Syntax-Erkennung
   └── Findet alle {{wk:snippet>...}} Tags

2. Snippet-Lookup
   └── Sucht {key}.html: zuerst <savedir>/wksnippet/,
       sonst lib/plugins/wksnippet/snippets/
   └── Lädt den HTML-Inhalt aus der Datei

3. Marken im Snippet
   └── Ersetzt {DOKU_BASE}, {{wk:image>...}} und ...
   └── Wendet aktuelle Sprache an

4. HTML-Ausgabe
   └── Entfernt HTML-Kommentare des Snippets
   └── Fügt den HTML-Code in die Seite ein
   └── Keine zusätzliche Escaping (Raw HTML)

Verarbeitungsreihenfolge

Priorität Plugin Sort-Wert
1 wki18n 1
2 wksnippet 50
3 wkimage 319
Die Marken wk:i18n und wk:image innerhalb eines Snippets laufen nicht durch den Seitenparser: Der Helfer von wksnippet ersetzt sie selbst, wenn er das Snippet einsetzt. Übersetzungen in Snippets funktionieren deshalb unabhängig von der Reihenfolge der Plugins.

Integration

Mit wki18n

Snippets unterstützen alle wki18n-Syntaxen:

Datei: <savedir>/wksnippet/multilingual_block.html

<div class="info">
    greeting
    de:Hallo|en:Hello|sl:Zdravo
    {{wk:lang:en>english_only_text}}
</div>

Mit wkacmenu

Typische Sidebar-Struktur:

~~NOCACHE~~
{{wk:snippet>go_back}}
{{wk:acmenu}}

Mit wkimage

Snippets können auch Bilder enthalten:

Datei: <savedir>/wksnippet/logo_block.html

<div class="logo">
    {{wk:image>wiki:logo.png|width=100%|maxwidth=200}}
</div>

Sicherheit

Vorteile gegenüber htmlok

Aspekt htmlok wksnippet
HTML-Eingabe Frei in jeder Seite Nur über Admin
Sicherheitsrisiko Hoch (XSS, Injection) Niedrig (kontrolliert)
Audit Schwierig (verstreut) Einfach (zentral)
Benutzer-Rechte Jeder mit Bearbeitung Nur Administratoren

Best Practices

  • JavaScript minimal halten - Nur wenn unbedingt nötig
  • Externe Links mit target=“_blank” - Sicherheit mit rel=“noopener”
  • Keine sensiblen Daten - Keine API-Keys, Passwörter in Snippets
  • Eindeutige Namen - Snippet-Namen aussagekräftig wählen

Fehlerbehandlung

Verhalten bei Fehlern

Szenario Verhalten
Snippet nicht gefunden Gibt nichts aus. Der Helfer liefert den Kommentar <!– snippet 'key' not found –>, und die Ausgabe entfernt HTML-Kommentare vor der Auslieferung; im Quelltext der Seite steht er deshalb nicht. Die Seite wird weiter aufgebaut.
Leeres Snippet Gibt nichts aus
Datei ohne Endung .html Wird nicht geladen; der Schlüssel gilt als nicht vorhanden
wki18n-Fehler Gibt Key zurück (Fallback)

Debugging

Bei Problemen prüfen:

  • Ist der Snippet-Name korrekt geschrieben?
  • Existiert die Datei <savedir>/wksnippet/{key}.html oder lib/plugins/wksnippet/snippets/{key}.html?
  • Hat die Datei die Erweiterung .html?
  • Ist gesetzt für dynamische Inhalte?
  • Funktionieren die wki18n-Tags einzeln?

Performance

Empfehlungen

Szenario Empfehlung
Statische Snippets Cache aktiviert lassen
Dynamische Snippets (Sprache) verwenden
Große Snippets In kleinere aufteilen
Viele Snippets Nicht mehr als 50 definieren

Caching

Seiten mit sprachabhängigen Snippets sollten am Anfang haben, damit die richtige Sprachversion angezeigt wird.

Versionshinweise

Version Datum Änderungen
2.1.0 2026-01-26 Admin-Interface, Datei-basierte Speicherung (HTML-Dateien)
2.0.0 2026-01-06 Umbenennung von wvdschunk zu wksnippet
1.0.0 2025-01-06 Erstveröffentlichung

Siehe auch


Technische Referenz

Klasse: syntax_plugin_wksnippet

Datei: lib/plugins/wksnippet/syntax.php

Methode Beschreibung
getType() Gibt substition zurück (so schreibt der DokuWiki-Kern den Modus)
getSort() Gibt 50 zurück
connectTo($mode) Registriert Pattern \{\{wk:snippet>[a-zA-Z0-9_-]+(?:\|php)?\}\}
handle($match, …) Extrahiert Snippet-Namen
render($mode, …) Gibt HTML-Inhalt aus

Klasse: helper_plugin_wksnippet

Datei: lib/plugins/wksnippet/helper.php

Methode Parameter Rückgabe Beschreibung
getSnippets() - array Lädt die Snippets aus beiden Verzeichnissen (die der Site überdecken die mitgelieferten)
get() $name string Gibt Snippet-Inhalt zurück

Klasse: admin_plugin_wksnippet

Datei: lib/plugins/wksnippet/admin.php

Methode Beschreibung
html() Rendert Admin-Interface
handle() Verarbeitet Formular-Aktionen (speichern, löschen, erstellen)

Dateistruktur

lib/plugins/wksnippet/
├── admin.php          → Admin-Interface
├── helper.php         → Snippet-Laden und -Verarbeitung
├── syntax.php         → Wiki-Syntax Parser
├── conf/
│   ├── default.php    → Standard-Einstellungen
│   └── metadata.php   → Admin-UI Metadaten
└── snippets/          → mitgelieferte Snippets (nur lesend)
    ├── go_back.html
    ├── social_links.html
    └── ...

<savedir>/wksnippet/   → Snippets der Site (hierhin schreibt der Verwaltungsbildschirm)

<wk:audit stack=“doku” title=“wksnippet Plugin”>

<wk:include ref="code:qualitaet" critical="true">[x][x][x][x]</wk:include>
<wk:include ref="stacks:dokuwiki-php">[x][x][x][x][x]</wk:include>
<wk:include ref="sicherheit:kritis" critical="true">[x][x][x][-][-]</wk:include>

</wk:audit>

DISCUSSION

Paketangaben

Plugin: wksnippet
Version: 2.1.0
Namespace: lib/plugins/wksnippet/
Autor: Wolfgang van der Stille Wolfgang.van.der.Stille@gmail.com (The White Knight Labs)
Lizenz: GPL 2

de/wiki/dwe/wksnippet/start.txt · Last modified: by 0.0.0.0