Pomoc:Funkcje parsera
Z Wikipedii
Aby zapobiec konfliktom edycji inni użytkownicy proszeni są o niedokonywanie w nim zmian do czasu usunięcia tego komunikatu lub skontaktowanie się z wikipedystą tomta1.
Skrót: WP:FP Poniższy artykuł dotyczy funkcji parsera. Jest to luźne tłumaczenie artykułu meta, dostępnego tutaj.
Funkcje parsera są rozszerzeniami mechanizmu szablonów ułatwiającymi konstrukcję skomplikowanych szablonów, dających różne efekty w zależności od użytych parametrów. Zostały aktywowane na wszystkich wikipediach na zasadzie testu.
Spis treści |
[edytuj] Funkcje
Istnieje rozszerzenie MediaWiki, będące kolekcją funkcji parsera. Ich wywołanie najczęściej ma postać:
{{#nazwa_fukcji: argument 1 | argument 2 | argument 3...}} |
Poniżej opisano pięć funkcji: if, ifeq, switch, expr oraz ifexpr
[edytuj] if
If (z ang. jeśli, jeżeli). Funkcja if ma w ogólności postać:
{{#if: warunek | tekst 1 | tekst 2 }} |
czyli:
{{#if: niepusty argument 1|to wyświetl argument 2|w przeciwnym wypadku wyświetl argument 3}} |
Jeśli warunek nie jest pusty, albo nie zawiera samych spacji, to wyświetlany jest tekst 1. W przeciwnym wypadku (gdy pole warunek jest puste, albo zawiera same spacje) wyświetlany jest tekst 2.
[edytuj] Sprawdzanie parametru szablonu
Jako warunek w różnych szablonach najlepiej podawać dowolny parametr i w ten sposób szablon będzie mógł "reagować" na to czy parametr jest pusty czy nie.
{{#if: {{{parametr|}}} | Parametr jest nie pusty. | Parametr nie został podany lub jest pusty.}} |
- Wywołanie jako
{{Szablon|parametr=cokolwiek}}
daje wynik:
- Parametr jest nie pusty.
- Wywołanie jako
{{Szablon|parametr=}}
lub po prostu{{Szablon}}
daje wynik:
- Parametr nie został podany lub jest pusty.
Czyli w pierwszej sytuacji wyświetlany jest pierwszy tekst, a w drugiej ten drugi.
[edytuj] Sprawdzanie i wstawianie parametru
Skoro można przetestować, czy jakiś parametr jest pusty, to można go też dalej wstawić i wyświetlić.
{{#if: {{{parametr|}}} | Parameter jest nie pusty i oto on: {{{parametr|}}}. | Parameter nie został podany lub jest pusty.}} |
- Wywołanie jako
{{Szablon|parametr=cokolwiek}}
daje wynik:
- Parameter jest nie pusty i oto on: cokolwiek.
- Wywołanie jako
{{Szablon|parametr=}}
lub po prostu{{Szablon}}
jest identyczne jak wyżej i daje wynik:
- Parameter nie został podany lub jest pusty.
[edytuj] Przykład użytkowy
Nieco sensowniejszym przykładem, który pozwoli zrozumieć po co to jest, może być poniższy prosty szablon:
{{#if:{{{kobieta|}}}|Ta wikipedystka|Ten wikipedysta}} potrafi już używać funkcji parsera i jest z tego dumn{{#if:{{{kobieta|}}}|a|y}}. |
- Wywołanie jako
{{Szablon|kobieta=tak}}
daje wynik:
- Ta wikipedystka potrafi już używać funkcji parsera i jest z tego dumna.
- Wywołanie jako
{{Szablon|kobieta=}}
- Ten wikipedysta potrafi już używać funkcji parsera i jest z tego dumny.
Wszystko będzie w porządku póki będziemy pamiętać, że sprawdzane jest tylko, czy podany parametr jest pusty, stąd
- Wywołanie jako
{{Szablon|kobieta=nie}}
daje wynik:
- Ta wikipedystka potrafi już używać funkcji parsera i jest z tego dumna.
[edytuj] ifeq
ifeq (od if equal — ang. jeśli równe). Funkcja ifeq ma w ogólności postać:
{{#ifeq: porównaj A | porównaj B | tekst 1 | tekst 2 }} |
czyli:
{{#ifeq: argument 1|jest równy argument 2 | to wyświetl argument 3|w przeciwnym wypadku wyświetl argument 4}} |
Jeśli porównaj A i porównaj B są identyczne, to wyświetlany jest tekst 1. W przeciwnym wypadku (gdy pole porównaj A i porównaj B są różne) wyświetlany jest tekst 2.
[edytuj] Przykład użytkowy w wydaniu ifeq
Funkcja ifeq nadaje się idealnie do uczynienia poprzedniego szablonu nieco bardziej intuicyjnym:
{{#ifeq:{{{kobieta}}}|tak|Ta wikipedystka|Ten wikipedysta}} potrafi już używać funkcji parsera i jest z tego dumn{{#ifeq:{{{kobieta}}}|tak|a|y}}. |
- Wywołanie jako
{{Szablon|kobieta=tak}}
daje wynik:
- Ta wikipedystka potrafi już używać funkcji parsera i jest z tego dumna.
- Wywołanie jako
{{Szablon|kobieta=}}
- Ten wikipedysta potrafi już używać funkcji parsera i jest z tego dumny.
- Wywołanie jako
{{Szablon|kobieta=nie}}
daje wynik:
- Ten wikipedysta potrafi już używać funkcji parsera i jest z tego dumny.
[edytuj] Prostszy przykład
Ale żeby nie zagubić sensu może warto jednak dać dwa proste przykłady (tym razem bez użycia szablonów).
- Treść przykładu (1)
{{#ifeq: tak | tak | podane argumenty są równe | podane argumenty są różne }} |
- Wynik
- podane argumenty są równe
- Treść przykładu (2)
{{#ifeq: tak | nie | podane argumenty są równe | podane argumenty są różne }} |
- Wynik
- podane argumenty są różne
Czyli tak jest równe tak, nie jest różne od tak. To chyba oczywiste ☺.
W wypadku tej funkcji też można jednak ponarzekać, że nie wszystko jest tak jak chcemy:
- Treść przykładu (3)
{{#ifeq: tak | Tak | podane argumenty są równe | podane argumenty są różne }} |
- Wynik
- podane argumenty są różne
Jednak tak jest różne od Tak, co jak się przyjrzeć może nie jest aż takie dziwne ;).
[edytuj] ifexist
ifexist (od if exist — ang. jeśli istnieje). Funkcja ifexist ma w ogólności postać:
{{#ifexist: artykuł | tekst 1 | tekst 2 }} |
czyli:
{{#ifexist: artykuł o nazwie argument 1|to wyświetl argument 2|w przeciwnym wypadku wyświetl argument 3}} |
Jeśli istnieje artykuł, to wyświetl tekst 1. W przeciwnym wypadku (gdy artykuł nie istnieje) wyświetlany jest tekst 2.
[edytuj] Przykłady
{{#ifexist:Coś|Coś istnieje|Coś nie istnieje}}
- daje w wyniku "Coś nie istnieje", bo artykuł Coś nie istnieje.{{#ifexist:Łoś|Łoś istnieje|Łoś nie istnieje}}
- daje w wyniku "Łoś istnieje", bo artykuł Łoś istnieje.
[edytuj] Wyjątki
Tu należy zwrócić uwagę, że funkcja działa analogicznie do oznaczania linków na niebiesko (gdy artykuł istnieje) i na czerwono (gdy artykuł nie istnieje). Jak do tej pory, takie oznaczanie linków nie działa dla interwiki (oraz linków do pokrewnych projektów). Podobnie ta funkcja parsera nie obsługuje tego rodzaju linków.
- Choć en:Moose istnieje, to:
{{#ifexist::en:Moose|Moose istnieje?|Moose nie istnieje?}}
- daje w wyniku "Moose nie istnieje?", co nie jest prawdą.
[edytuj] switch
switch
porównuje pojedynczą wartość z wieloma innymi. Jeżeli znajdzie taką samą wartość zwraca odpowiedni ciąg znaków. W przeciwnym wypadku zwróci wartość domyślną, o ile taka zostanie podana.
sposób wywołania:
{{ '''#switch:''' ''wartość do porównania'' | ''wartość<sub>1</sub>'' = ''wynik<sub>1</sub>'' | ''wartość<sub>2</sub>'' = ''wynik<sub>2</sub>'' | ''...'' | ''wartość<sub>n</sub>'' = ''wynik<sub>n</sub>'' | ''wartość domyślna'' }} |
lub (w przypadku gdy wartość domyślna musi zawierać znak równości):
{{ '''#switch:''' ''wartość do porównania'' | ''wartość<sub>1</sub>'' = ''wynik<sub>1</sub>'' | ''wartość<sub>2</sub>'' = ''wynik<sub>2</sub>'' | ''...'' | ''wartość<sub>n</sub>'' = ''wynik<sub>n</sub>'' | '''#default''' = ''wartość domyślna'' }} |
lub (w przypadku gdy dla kilku różnych wartości ma być ten sam wynik):
{{ '''#switch:''' ''wartość do porównania'' | ''wartość<sub>1</sub>'' | ''wartość<sub>2</sub>'' | ''wartość<sub>3</sub>'' = ''wynik<sub>1/2/3</sub>'' | ''...'' | ''wartość<sub>n</sub>'' = ''wynik<sub>n</sub>'' | ''wartość domyślna'' }} |
Przykład:
{{ #switch: {{{dzień}}} | 1 = poniedziałek | 2 = wtorek | 3 = środa | 4 = czwartek | 5 = piątek | 6 = sobota | 7 = niedziela | weekend }} |
Porównuje treść przesyłaną przez parametr dzień. Jeśli ta treść to 1-7 w wyniku otrzymamy odpowienią nazwę dnia tygodnia. Gdy treść będzie inna lub pędzie pusta, otrzymamy tekst weekend.
[edytuj] expr
Funkcja expr
wykonuje obliczenia matematyczne.
{{ #expr: wyrażenie }} |
[edytuj] Tabela używanych operatorów
-
Operator Operacja matematyczna Przykład + Dodawanie {{#expr: 30 + 7}}
= 37- Odejmowanie {{#expr: 30 - 7}}
= 23* Mnożenie {{#expr: 30 * 7}}
= 210/
divDzielenie {{#expr: 30 / 7}}
= 4.2857142857143round x Zaokrąglanie do x miejsc po przecinku {{#expr: 30 / 7 round 3}}
= 4.286mod Dzielenie modulo (reszta z dzielenia) {{#expr: 30 mod 7}}
= 2Operatory logiczne ("1" - prawda, "0" - fałsz) = Równa się {{#expr: 30 = 7}}
= 0<>
!=Nie równa się (jest większe lub mniejsze) {{#expr: 30 <> 7}}
= 1< Mniejsze niż {{#expr: 30 < 7}}
= 0> Większe niż {{#expr: 30 > 7}}
= 1<= Mniejsze lub równe {{#expr: 30 <= 7}}
= 0>= Większe lub równe {{#expr: 30 >= 7}}
= 1and Logiczne i {{#expr: 30 and 7}}
= 1or Logiczne lub {{#expr: 30 or 7}}
= 1not logiczne nie {{#expr: not 7}}
= 0Specjalne ( ) Grupowanie {{#expr: (30 + 7) * 5 }}
= 185
UWAGA! Łącznikiem dziesiętnym liczb jest .
kropka (półtora=1.5).
[edytuj] Praktyczny przykład
Aby obliczyć ile stopni Celsjusza odpowiada 100°F można skorzystać ze wzoru (wyrażenia) podanego poniżej.
- Treść przykładu:
{{#expr: (100 - 32) / 9 * 5 round 0 }} |
- Wynik:
{{#expr: (100 - 32) / 9 * 5 round 0}} |
100°F nie jest dokładnie równe 38°C, jednak dzięki użyciu round 0, wynik został zaokrąglony do najbliższej liczby całkowitej.
[edytuj] ifexpr
ifexpr wykonuje działanie matematyczne i zwraca jeden lub drugi string w zależności od wyniku.
|
Jeżeli wyrażenie da wynik 0, to zostanie wyświetlony tekst w przeciwnym wypadku tekst 2. Natomiast, jeżeli wynikiem jest liczba inna niż 0, to wyświetlony zostanie tekst wtedy tekst 1. Funkcja obsługuje te same operatory co funkcja expr.
[edytuj] time
time zwraca czas w zdanym formacie także dla daty podanej w opcjonalnym drugim parametrze, bądź w wersji względnej (np. +1 month).
{{ #time: format | określenie czasu (opcjonalne) }}
Opisy formatu po polsku znajdziesz na pl.php.net. Dodatkowe możliwe kody podano poniżej (rozszerzenie składni PHP).
Kod | Opis |
---|---|
xg | Wyświetla nazwę miesiąca w dopełniaczu (np. "września"). |
xn | Następujący po tej sekwencji znaków kod formatu (na przykład godziny 'H') zostanie wyświetlony jako kod ASCII. Dla przykładu w języku Hindi, {{#time:H, xnH}} da w wyniku ०६, 06. |
xr | Następujący po tej sekwencji znaków kod formatu (na przykład godziny 'H') zostanie wyświetlony jako liczba rzymska; przykład {{#time:H, xrH}} da w wyniku 14, XIV |
xx | Wyświetla znak 'x' |
- Zobacz więcej: na meta (en).
[edytuj] Znak potoku
Przy tworzeniu tabel w formacie MediaWiki należy użyć szablonu {{!}} zamiast znaku potoku (|), gdyż funkcje parsera uniemożliwiają zwykłe jego wstawienie (alternatywnie można użyć składni HTML). Przy wpisywaniu znaku potoku jako zwykły tekst można użyć konstrukcji <nowiki>|</nowiki>.
[edytuj] Nowy wiersz
W obrębie funkcji parsera należy użyć składni HTML dla nowego wiersza (<br/>).
[edytuj] Nowy akapit
W następującym przypadku:
Pierwszy akapit, wyświetlany zawsze.{{#if:{{{1|}}}| Drugi akapit, wyświetlany jedynie, gdy zostanie podany argument {{{1}}}.}}
należy dodać <nowiki/> przed rozpoczęciem drugiego akapitu (tzw. whitespace) aby został poprawnie wyświetlony, np.:
Pierwszy akapit, wyświetlany zawsze.{{#if:{{{1|}}}|<nowiki/> Drugi akapit, wyświetlany jedynie, gdy zostanie podany argument {{{1}}}.}}