Portál AbcLinuxu, 2. května 2025 06:08
Vítám vás u dalšího dílu volného seriálu o ptákovinách v MediaWiki. Tentokrát se zaměřím na zdánlivě banální věc, a to: "Jak zajistit, aby se anonymnímu uživateli nezobrazoval stejný obsah, jako uživateli přihlášenému".
Při řešení tohoto problému se neobejdete bez rozšíření MyVariables a ParserFunctions, pro které musí být navíc povoleny funkce pro zpracování textových řetězců:
$wgPFEnableStringFunctions = true;
O rozšíření ParserFunctions, již padla zmínka v minulém blogpostu. Rozšíření MyVariables, přidává mezi "kouzelná slůvka" další proměnné využitelné v šablonách. Ty ale nemusí být dostupné pokud není uživatel přihlášený - rozuměj, nemá ve svém nastavení příslušnou hodnotu - to byl případ proměnné USERLANGUAGECODE, o které rovněž padla zmínka již minule.
V tomto případě to však využijeme v náš prospěch. Pro anonymního uživatele se totiž místo uživatelského jména v proměnné CURRENTUSER zobrazuje IP adresa. A ta vždy - jak pro IPv4, tak IPv6 - začíná číslem. Korektní uživatelské jméno ne. Proto si nejprve vytáhneme první znak proměnné CURRENTUSER, a ten podrobíme matematické operaci. Ta v případě autentifikovaného uživatele skončí chybou, kterou odchytíme. Viz příklad:
{{#iferror: {{#expr: 1 + {{#sub:{{CURRENTUSER}}|0|1}} }} | error | ok }}
Pro anonymního uživatele se zobrazí řetězec ok, kdežto pro přihlášeného error a na tom lze postavit už prakticky cokoliv.
Ovšem jak zcela správně podotknul anonymní uživatel v diskuzi - co dělat v případě, že uživatelská jména mohou začínat číslem? Pomiňme nyní fakt, že číslem začíná tak leda jméno obyvatele koncetračního tábora.
Je to prosté - nejprve se kopnu do hlavy, a pak použiju proměnnou CURRENTLOGGEDUSER, kterou jsem prve přehlédnul.
{{#if:{{CURRENTLOGGEDUSER}}|ok}}
Aneb, proč dělat věci jednoduše, když to jde i složitě.. 8-P
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.