====== WvdS.DokuWiki.Cond Dodatak ====== **Dodatak:** wvdscond\\ **Verzija:** 1.0.0\\ **Imenski prostor:** ''lib/plugins/wvdscond/''\\ **Autor:** Wolfgang van der Stille \\ **Licenca:** GPL 2 ---- **Migracija iz wvdsif:** Ovaj dodatak zamjenjuje stari dodatak ''wvdsif'' i proširuje ga funkcijom preusmjeravanja. Postojeća sintaksa '''', '''' i '''' ostaje potpuno kompatibilna. ---- ===== Definicija ===== Dodatak **wvdscond** kombinira uvjetno prikazivanje sadržaja i serverska preusmjeravanja u jednom dodatku. Pruža: * **Uvjetne oznake** - '''', '''', '''' * **Preusmjeravanja** - ''{{wvds:redirect target="..."}}'' s podrškom varijabli * **Negacija** - '''' ili '''' ===== 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 ==== Sadržaj za ovu grupu Sadržaj za više grupa Sadržaj za NE-goste ==== ifnotgroup - Negacija ==== Sadržaj za prijavljene korisnike Sadržaj za ne-administratore ==== iflang - Po jeziku preglednika ==== Sadržaj za ovaj jezik Sadržaj za više jezika Rezervni sadržaj (uvijek prikazan) ==== 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"}} ===== VIP Područje ===== Dobrodošli u ekskluzivno područje! ==== Primjer 4: Višejezična početna stranica ==== **Zahtjev:** Pozdravi na različitim jezicima. ~~NOCACHE~~ ===== Willkommen ===== Dies ist unsere Wissensdatenbank auf Deutsch. ===== Welcome ===== This is our knowledge base in English. ===== Dobrodošli ===== Ovo je naša baza znanja na hrvatskom. ===== Welcome ===== Please select your language. ==== Primjer 5: Admin navigacija ==== **Zahtjev:** Admin poveznice vidljive samo administratorima. ~~NOCACHE~~ ===== Navigacija ===== * [[.:start|Početna stranica]] * [[.:docs:index|Dokumentacija]] * [[.:intern:index|Interno područje]] * [[.:admin:index|Administracija]] ---- ===== 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 ==== Stranice s uvjetnim oznakama trebaju koristiti ''~~NOCACHE~~'' kako bi se sadržaj ponovno renderirao pri svakom zahtjevu. ---- ===== Migracija iz wvdsif ===== ^ Staro (wvdsif) ^ Novo (wvdscond) ^ Status ^ | '''' | '''' | Kompatibilno | | '''' | '''' | Kompatibilno | | - | '''' | NOVO | | - | ''{{wvds:redirect}}'' | NOVO | ---- ===== Napomene o verziji ===== ^ Verzija ^ Datum ^ Promjene ^ | 1.0.0 | 2026-01-29 | Prva izdanja | ---- ===== Vidi također ===== * [[.:wvdsi18n]] - Dodatak za prijevode (nasljednik wvdslang) * [[.:wvdssnippet]] - Višekratno upotrebljivi HTML blokovi * [[.:flat]] - 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. | ---- [x][x][x][x] [x][x][x][x][x] [x][x][x][x][x] ~~DISCUSSION~~