Inhaltsverzeichnis
WvdS.DokuWiki.Cond Plugin
Plugin: wvdscond
Version: 1.0.0
Namespace: lib/plugins/wvdscond/
Autor: Wolfgang van der Stille zeljko.petrusic@outlook.de
Lizenz: GPL 2
wvdsif Plugin und erweitert es um Redirect-Funktionalitaet.
Die bestehende Syntax <ifgroup>, <ifnotgroup> und <iflang> bleibt vollstaendig kompatibel.
Definition
Das wvdscond Plugin vereint bedingte Inhaltsanzeige und Server-seitige Redirects in einem Plugin. Es bietet:
- Bedingte Tags -
<ifgroup>,<ifnotgroup>,<iflang> - Redirects -
redirect_targetmit Variablen-Unterstuetzung - Negation -
<ifgroup !guest>oder<ifnotgroup guest>
Anwendungsfaelle
- Berechtigungsbasierte Inhalte - Verschiedene Inhalte fuer Gaeste, Benutzer, Admins
- Mehrsprachige Startseiten - Sprachspezifische Begruessungen und Inhalte
- Automatische Sprachweiterleitung - Redirect basierend auf Browser-Sprache
- Login-Redirects - Weiterleitung nach Anmeldung
- Bedingte Weiterleitungen - Redirects nur fuer bestimmte Gruppen
Syntax
ifgroup - Nach Benutzergruppe
<ifgroup gruppenname>Inhalt fuer diese Gruppe</ifgroup> <ifgroup gruppe1,gruppe2>Inhalt fuer mehrere Gruppen</ifgroup> <ifgroup !guest>Inhalt fuer NICHT-Gaeste</ifgroup>
ifnotgroup - Negation
<ifnotgroup guest>Inhalt fuer angemeldete Benutzer</ifnotgroup> <ifnotgroup admin>Inhalt fuer Nicht-Admins</ifnotgroup>
iflang - Nach Browser-Sprache
<iflang sprachcode>Inhalt fuer diese Sprache</iflang> <iflang code1,code2>Inhalt fuer mehrere Sprachen</iflang> <iflang *>Fallback-Inhalt (immer angezeigt)</iflang>
wvds:redirect - Server-seitige Weiterleitung
{{wvds:redirect target="de:start"}}
{{wvds:redirect target="{lang}:start"}}
{{wvds:redirect target="int:home" ifgroup="user"}}
{{wvds:redirect target="{lang}:pub:start" ifnotgroup="user"}}
Redirect-Variablen
| Variable | Ersetzt durch | Beispiel |
|---|---|---|
{lang} | Browser-Sprache | de, en, sl |
{group} | Erste Benutzergruppe | user, admin, vip |
{user} | Benutzername | wvds |
{ns} | Aktueller Namespace | de:docs |
Redirect-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
target | Pflicht | Ziel-Seite (Page-ID oder mit Variablen) |
ifgroup | Optional | Redirect nur fuer diese Gruppe(n) |
ifnotgroup | Optional | Redirect nur wenn NICHT in Gruppe(n) |
Gruppen-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
guest | vordefiniert | Nicht angemeldete Besucher |
user | vordefiniert | Alle angemeldeten Benutzer |
admin | vordefiniert | Administratoren |
[gruppenname] | benutzerdefiniert | Jede in DokuWiki definierte Gruppe |
Beispiele
Beispiel 1: Sprachbasierter Redirect
Anforderung: Startseite leitet automatisch zur Browser-Sprache weiter.
{{wvds:redirect target="{lang}:start"}}
Ergebnis:
- Browser auf Deutsch: Redirect zu
de:start - Browser auf Englisch: Redirect zu
en:start - Browser auf Slowenisch: Redirect zu
sl:start
Beispiel 2: Login-Redirect
Anforderung: Gaeste werden zu einer oeffentlichen Seite geleitet, angemeldete Benutzer bleiben.
{{wvds:redirect target="pub:start" ifnotgroup="user"}}
Ergebnis:
- Gast: Redirect zu
pub:start - Angemeldet: Kein Redirect
Beispiel 3: VIP-Bereich
Anforderung: Nicht-VIPs werden zur Info-Seite weitergeleitet.
{{wvds:redirect target="info:upgrade" ifnotgroup="vip,premium"}}
<ifgroup vip,premium>
===== VIP Bereich =====
Willkommen im exklusiven Bereich!
</ifgroup>
Beispiel 4: Mehrsprachige Startseite
Anforderung: Begruessungen in verschiedenen Sprachen.
~~NOCACHE~~ <iflang de> ===== Willkommen ===== Dies ist unsere Wissensdatenbank auf Deutsch. </iflang> <iflang en> ===== Welcome ===== This is our knowledge base in English. </iflang> <iflang *> ===== Welcome ===== Please select your language. </iflang>
Beispiel 5: Admin-Navigation
Anforderung: Admin-Links nur fuer Admins sichtbar.
~~NOCACHE~~ ===== Navigation ===== * [[.:start|Startseite]] * [[.:docs:index|Dokumentation]] <ifnotgroup guest> * [[.:intern:index|Interner Bereich]] </ifnotgroup> <ifgroup admin> * [[.:admin:index|Administration]] </ifgroup>
Funktionsweise
Redirect-Verarbeitung
1. Pattern-Erkennung
└── Findet {{wvds:redirect ...}}
2. Bedingungspruefung (falls vorhanden)
├── ifgroup: Prueft Gruppenzugehoerigkeit
└── ifnotgroup: Prueft NICHT-Zugehoerigkeit
3. Variablen-Ersetzung
├── {lang} → Browser-Sprache
├── {user} → Benutzername
├── {group} → Erste Gruppe
└── {ns} → Aktueller Namespace
4. Redirect-Ausfuehrung
├── HTTP 301/302 Header (bevorzugt)
├── Meta-Refresh (Fallback)
└── JavaScript (Fallback)
Sicherheitshinweise
- Redirects verwenden wl() fuer interne URLs (Open Redirect Prevention)
- Keine externen URLs erlaubt (CWE-601 Schutz)
- Alle Ausgaben werden mit hsc() escaped (XSS-Schutz)
Konfiguration
Das Plugin benoetigt keine spezielle Konfiguration. Die Gruppenerkennung nutzt die Standard-DokuWiki-ACL-Gruppen.
Wichtiger Hinweis
verwenden, damit der Inhalt bei jedem Aufruf neu gerendert wird.
Migration von wvdsif
| Alt (wvdsif) | Neu (wvdscond) | Status |
|---|---|---|
<ifgroup user> | <ifgroup user> | Kompatibel |
<iflang de> | <iflang de> | Kompatibel |
| - | <ifnotgroup guest> | NEU |
| - | redirect | NEU |
Versionshinweise
| Version | Datum | Aenderungen |
|---|---|---|
| 1.0.0 | 2026-01-29 | Erstveroeffentlichung |
Siehe auch
- WvdS.DokuWiki.i18n Plugin - Uebersetzungs-Plugin (Nachfolger von wvdslang)
- WvdS.DokuWiki.Snippet Plugin - Wiederverwendbare HTML-Bausteine
- WvdS.DokuWiki.Flat Template - Template mit Sprachwechsler
Technische Referenz
Klasse: syntax_plugin_wvdscond
Datei: lib/plugins/wvdscond/syntax.php
| Methode | Beschreibung |
|---|---|
getType() | Gibt substitution zurück |
getSort() | Gibt 100 zurueck |
connectTo($mode) | Registriert ifgroup, ifnotgroup, iflang, redirect Pattern |
handle($match, …) | Parst Tag und extrahiert Bedingung |
render($mode, …) | Gibt Inhalt, Redirect oder leer zurueck |
Klasse: helper_plugin_wvdscond
Datei: lib/plugins/wvdscond/helper.php
| Methode | Beschreibung |
|---|---|
getUserGroups() | Gibt alle Gruppen des Benutzers zurueck |
checkGroup($groups) | Prueft ob Benutzer in Gruppe ist |
checkNotGroup($groups) | Prueft ob Benutzer NICHT in Gruppe ist |
detectBrowserLang() | Erkennt Browser-Sprache |
checkLang($langs) | Prueft Sprachuebereinstimmung |
replaceVariables($target) | Ersetzt {lang}, {user}, etc. |
Diskussion