Inhaltsverzeichnis
WvdS.DokuWiki.Cond Dodatak
Dodatak: wvdscond
Verzija: 1.0.0
Imenski prostor: lib/plugins/wvdscond/
Autor: Wolfgang van der Stille zeljko.petrusic@outlook.de
Licenca: GPL 2
wvdsif i proširuje ga funkcijom preusmjeravanja.
Postojeća sintaksa <ifgroup>, <ifnotgroup> i <iflang> ostaje potpuno kompatibilna.
Definicija
Dodatak wvdscond kombinira uvjetno prikazivanje sadržaja i serverska preusmjeravanja u jednom dodatku. Pruža:
- Uvjetne oznake -
<ifgroup>,<ifnotgroup>,<iflang> - Preusmjeravanja -
redirect_targets podrškom varijabli - Negacija -
<ifgroup !guest>ili<ifnotgroup guest>
Primjeri uporabe
- Sadržaj temeljen na dozvolama - Različit sadržaj za goste, korisnike, administratore
- Višejezične početne stranice - Jezično specifična pozdravljanja i sadržaj
- Automatsko jezično preusmjeravanje - Preusmjeravanje na temelju jezika preglednika
- Preusmjeravanja nakon prijave - Preusmjeravanje nakon uspješne prijave
- Uvjetna preusmjeravanja - Preusmjeravanja samo za određene grupe
Sintaksa
ifgroup - Po korisničkoj grupi
<ifgroup imegrupe>Sadržaj za ovu grupu</ifgroup> <ifgroup grupa1,grupa2>Sadržaj za više grupa</ifgroup> <ifgroup !guest>Sadržaj za NE-goste</ifgroup>
ifnotgroup - Negacija
<ifnotgroup guest>Sadržaj za prijavljene korisnike</ifnotgroup> <ifnotgroup admin>Sadržaj za ne-administratore</ifnotgroup>
iflang - Po jeziku preglednika
<iflang jezicni_kod>Sadržaj za ovaj jezik</iflang> <iflang kod1,kod2>Sadržaj za više jezika</iflang> <iflang *>Rezervni sadržaj (uvijek prikazan)</iflang>
wvds:redirect - Serversko preusmjeravanje
{{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"}}
Varijable za preusmjeravanje
| Varijabla | Zamjenjuje se s | Primjer |
|---|---|---|
{lang} | Jezik preglednika | de, en, sl, hr |
{group} | Prva korisnička grupa | user, admin, vip |
{user} | Korisničko ime | wvds |
{ns} | Trenutni imenski prostor | de:docs |
Parametri preusmjeravanja
| Parametar | Tip | Opis |
|---|---|---|
target | Obavezno | Ciljna stranica (Page-ID ili s varijablama) |
ifgroup | Opcionalno | Preusmjeravanje samo za ovu grupu |
ifnotgroup | Opcionalno | Preusmjeravanje samo ako NIJE u grupi |
Parametri grupa
| Parametar | Tip | Opis |
|---|---|---|
guest | unaprijed definirano | Neprijavljeni posjetitelji |
user | unaprijed definirano | Svi prijavljeni korisnici |
admin | unaprijed definirano | Administratori |
[imegrupe] | korisnički definirano | Bilo koja grupa definirana u DokuWiki |
Primjeri
Primjer 1: Jezično preusmjeravanje
Zahtjev: Početna stranica automatski preusmjerava na jezik preglednika.
{{wvds:redirect target="{lang}:start"}}
Rezultat:
- Preglednik na njemačkom: Preusmjeravanje na
de:start - Preglednik na engleskom: Preusmjeravanje na
en:start - Preglednik na hrvatskom: Preusmjeravanje na
hr:start
Primjer 2: Preusmjeravanje nakon prijave
Zahtjev: Gosti se preusmjeravaju na javnu stranicu, prijavljeni korisnici ostaju.
{{wvds:redirect target="pub:start" ifnotgroup="user"}}
Rezultat:
- Gost: Preusmjeravanje na
pub:start - Prijavljen: Bez preusmjeravanja
Primjer 3: VIP područje
Zahtjev: Ne-VIP korisnici se preusmjeravaju na info stranicu.
{{wvds:redirect target="info:upgrade" ifnotgroup="vip,premium"}}
<ifgroup vip,premium>
===== VIP Područje =====
Dobrodošli u ekskluzivno područje!
</ifgroup>
Primjer 4: Višejezična početna stranica
Zahtjev: Pozdravi na različitim jezicima.
~~NOCACHE~~ <iflang de> ===== Willkommen ===== Dies ist unsere Wissensdatenbank auf Deutsch. </iflang> <iflang en> ===== Welcome ===== This is our knowledge base in English. </iflang> <iflang hr> ===== Dobrodošli ===== Ovo je naša baza znanja na hrvatskom. </iflang> <iflang *> ===== Welcome ===== Please select your language. </iflang>
Primjer 5: Admin navigacija
Zahtjev: Admin poveznice vidljive samo administratorima.
~~NOCACHE~~ ===== Navigacija ===== * [[.:start|Početna stranica]] * [[.:docs:index|Dokumentacija]] <ifnotgroup guest> * [[.:intern:index|Interno područje]] </ifnotgroup> <ifgroup admin> * [[.:admin:index|Administracija]] </ifgroup>
Način rada
Obrada preusmjeravanja
1. Prepoznavanje uzorka
└── Pronalazi {{wvds:redirect ...}}
2. Provjera uvjeta (ako postoji)
├── ifgroup: Provjerava članstvo u grupi
└── ifnotgroup: Provjerava NE-članstvo
3. Zamjena varijabli
├── {lang} → Jezik preglednika
├── {user} → Korisničko ime
├── {group} → Prva grupa
└── {ns} → Trenutni imenski prostor
4. Izvršavanje preusmjeravanja
├── HTTP 301/302 zaglavlje (preferirano)
├── Meta-Refresh (rezerva)
└── JavaScript (rezerva)
Sigurnosne napomene
- Preusmjeravanja koriste wl() za interne URL-ove (sprječavanje otvorenih preusmjeravanja)
- Vanjske URL adrese nisu dozvoljene (zaštita CWE-601)
- Svi izlazi su escaped s hsc() (zaštita od XSS)
Konfiguracija
Dodatak ne zahtijeva posebnu konfiguraciju. Prepoznavanje grupa koristi standardne DokuWiki ACL grupe.
Važna napomena
kako bi se sadržaj ponovno renderirao pri svakom zahtjevu.
Migracija iz wvdsif
| Staro (wvdsif) | Novo (wvdscond) | Status |
|---|---|---|
<ifgroup user> | <ifgroup user> | Kompatibilno |
<iflang de> | <iflang de> | Kompatibilno |
| - | <ifnotgroup guest> | NOVO |
| - | redirect | NOVO |
Napomene o verziji
| Verzija | Datum | Promjene |
|---|---|---|
| 1.0.0 | 2026-01-29 | Prva izdanja |
Vidi također
- WvdS.DokuWiki.i18n Dodatak - Dodatak za prijevode (nasljednik wvdslang)
- WvdS.DokuWiki.Snippet Dodatak - Višekratno upotrebljivi HTML blokovi
- WvdS.DokuWiki.Flat Predložak - Predložak s preklopnikom jezika
Tehnička referenca
Klasa: syntax_plugin_wvdscond
Datoteka: lib/plugins/wvdscond/syntax.php
| Metoda | Opis |
|---|---|
getType() | Vraća substition |
getSort() | Vraća 100 |
connectTo($mode) | Registrira ifgroup, ifnotgroup, iflang, redirect uzorke |
handle($match, …) | Parsira oznaku i izvlači uvjet |
render($mode, …) | Vraća sadržaj, preusmjeravanje ili prazno |
Klasa: helper_plugin_wvdscond
Datoteka: lib/plugins/wvdscond/helper.php
| Metoda | Opis |
|---|---|
getUserGroups() | Vraća sve grupe korisnika |
checkGroup($groups) | Provjerava je li korisnik u grupi |
checkNotGroup($groups) | Provjerava je li korisnik NIJE u grupi |
detectBrowserLang() | Detektira jezik preglednika |
checkLang($langs) | Provjerava podudaranje jezika |
replaceVariables($target) | Zamjenjuje {lang}, {user}, itd. |
Diskussion