Inhaltsverzeichnis
WvdS.DokuWiki.Cond Plugin
Vtičnik: wvdscond
Verzija: 1.0.0
Imenski prostor: lib/plugins/wvdscond/
Avtor: Wolfgang van der Stille zeljko.petrusic@outlook.de
Licenca: GPL 2
wvdsif in ga razširja s funkcionalnostjo preusmeritev.
Obstoječa sintaksa <ifgroup>, <ifnotgroup> in <iflang> ostaja popolnoma združljiva.
Definicija
Vtičnik wvdscond združuje pogojno prikazovanje vsebine in strežniške preusmeritve v enem vtičniku. Ponuja:
- Pogojne oznake -
<ifgroup>,<ifnotgroup>,<iflang> - Preusmeritve -
redirect_targets podporo spremenljivk - Negacija -
<ifgroup !guest>ali<ifnotgroup guest>
Primeri uporabe
- Vsebina na podlagi pravic - Različna vsebina za goste, uporabnike, administratorje
- Večjezične začetne strani - Jezikovno specifična pozdravna sporočila in vsebina
- Samodejna jezikovna preusmeritev - Preusmeritev na podlagi jezika brskalnika
- Preusmeritve po prijavi - Preusmeritev po uspešni prijavi
- Pogojne preusmeritve - Preusmeritve samo za določene skupine
Sintaksa
ifgroup - Po uporabniški skupini
<ifgroup imeskupine>Vsebina za to skupino</ifgroup> <ifgroup skupina1,skupina2>Vsebina za več skupin</ifgroup> <ifgroup !guest>Vsebina za NE-goste</ifgroup>
ifnotgroup - Negacija
<ifnotgroup guest>Vsebina za prijavljene uporabnike</ifnotgroup> <ifnotgroup admin>Vsebina za ne-administratorje</ifnotgroup>
iflang - Po jeziku brskalnika
<iflang jezikovna_koda>Vsebina za ta jezik</iflang> <iflang koda1,koda2>Vsebina za več jezikov</iflang> <iflang *>Privzeta vsebina (vedno prikazana)</iflang>
wvds:redirect - Strežniška preusmeritev
{{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"}}
Spremenljivke za preusmeritev
| Spremenljivka | Nadomeščena z | Primer |
|---|---|---|
{lang} | Jezik brskalnika | de, en, sl |
{group} | Prva uporabniška skupina | user, admin, vip |
{user} | Uporabniško ime | wvds |
{ns} | Trenutni imenski prostor | de:docs |
Parametri preusmeritve
| Parameter | Tip | Opis |
|---|---|---|
target | Obvezno | Ciljna stran (Page-ID ali s spremenljivkami) |
ifgroup | Opcijsko | Preusmeritev samo za to skupino |
ifnotgroup | Opcijsko | Preusmeritev samo če NI v skupini |
Parametri skupin
| Parameter | Tip | Opis |
|---|---|---|
guest | vnaprej določen | Neprijavljeni obiskovalci |
user | vnaprej določen | Vsi prijavljeni uporabniki |
admin | vnaprej določen | Administratorji |
[imeskupine] | uporabniško določen | Katerakoli skupina definirana v DokuWiki |
Primeri
Primer 1: Jezikovna preusmeritev
Zahteva: Začetna stran samodejno preusmeri na jezik brskalnika.
{{wvds:redirect target="{lang}:start"}}
Rezultat:
- Brskalnik v nemščini: Preusmeritev na
de:start - Brskalnik v angleščini: Preusmeritev na
en:start - Brskalnik v slovenščini: Preusmeritev na
sl:start
Primer 2: Preusmeritev po prijavi
Zahteva: Gostje so preusmerjeni na javno stran, prijavljeni uporabniki ostanejo.
{{wvds:redirect target="pub:start" ifnotgroup="user"}}
Rezultat:
- Gost: Preusmeritev na
pub:start - Prijavljen: Brez preusmeritve
Primer 3: VIP območje
Zahteva: Ne-VIP uporabniki so preusmerjeni na informacijsko stran.
{{wvds:redirect target="info:upgrade" ifnotgroup="vip,premium"}}
<ifgroup vip,premium>
===== VIP Območje =====
Dobrodošli v ekskluzivnem območju!
</ifgroup>
Primer 4: Večjezična začetna stran
Zahteva: Pozdravna sporočila v različnih jezikih.
~~NOCACHE~~ <iflang de> ===== Willkommen ===== Dies ist unsere Wissensdatenbank auf Deutsch. </iflang> <iflang en> ===== Welcome ===== This is our knowledge base in English. </iflang> <iflang sl> ===== Dobrodošli ===== To je naša baza znanja v slovenščini. </iflang> <iflang *> ===== Welcome ===== Please select your language. </iflang>
Primer 5: Admin navigacija
Zahteva: Admin povezave so vidne samo administratorjem.
~~NOCACHE~~ ===== Navigacija ===== * [[.:start|Začetna stran]] * [[.:docs:index|Dokumentacija]] <ifnotgroup guest> * [[.:intern:index|Interno območje]] </ifnotgroup> <ifgroup admin> * [[.:admin:index|Administracija]] </ifgroup>
Delovanje
Obdelava preusmeritve
1. Prepoznava vzorca
└── Najde {{wvds:redirect ...}}
2. Preverjanje pogojev (če obstajajo)
├── ifgroup: Preveri članstvo v skupini
└── ifnotgroup: Preveri NE-članstvo
3. Nadomeščanje spremenljivk
├── {lang} → Jezik brskalnika
├── {user} → Uporabniško ime
├── {group} → Prva skupina
└── {ns} → Trenutni imenski prostor
4. Izvedba preusmeritve
├── HTTP 301/302 glava (prednostno)
├── Meta-Refresh (rezerva)
└── JavaScript (rezerva)
Varnostni nasveti
- Preusmeritve uporabljajo wl() za notranje URL-je (preprečevanje odprtih preusmeritev)
- Zunanje URL-je niso dovoljene (zaščita CWE-601)
- Vsi izpisi so escaped z hsc() (zaščita pred XSS)
Konfiguracija
Vtičnik ne potrebuje posebne konfiguracije. Prepoznavanje skupin uporablja standardne DokuWiki-ACL skupine.
Pomembna opomba
, da se vsebina pri vsakem obisku znova izriše.
Migracija iz wvdsif
| Staro (wvdsif) | Novo (wvdscond) | Status |
|---|---|---|
<ifgroup user> | <ifgroup user> | Združljivo |
<iflang de> | <iflang de> | Združljivo |
| - | <ifnotgroup guest> | NOVO |
| - | redirect | NOVO |
Opombe o verzijah
| Verzija | Datum | Spremembe |
|---|---|---|
| 1.0.0 | 2026-01-29 | Prva izdaja |
Glej tudi
- WvdS.DokuWiki.i18n Plugin - Vtičnik za prevode (naslednik wvdslang)
- WvdS.DokuWiki.Snippet Vticnik - Ponovno uporabni HTML gradniki
- WvdS.DokuWiki.Flat Predloga - Predloga s preklopnikom jezika
Tehnična referenca
Razred: syntax_plugin_wvdscond
Datoteka: lib/plugins/wvdscond/syntax.php
| Metoda | Opis |
|---|---|
getType() | Vrne substition |
getSort() | Vrne 100 |
connectTo($mode) | Registrira ifgroup, ifnotgroup, iflang, redirect vzorce |
handle($match, …) | Razčleni oznako in izvleče pogoj |
render($mode, …) | Vrne vsebino, preusmeritev ali prazno |
Razred: helper_plugin_wvdscond
Datoteka: lib/plugins/wvdscond/helper.php
| Metoda | Opis |
|---|---|
getUserGroups() | Vrne vse skupine uporabnika |
checkGroup($groups) | Preveri ali je uporabnik v skupini |
checkNotGroup($groups) | Preveri ali uporabnik NI v skupini |
detectBrowserLang() | Zazna jezik brskalnika |
checkLang($langs) | Preveri ujemanje jezika |
replaceVariables($target) | Nadomesti {lang}, {user}, itd. |
Diskussion