Довідка:Функції парсера

У квітні 2006 року у всіх проєктах фонду «Вікімедіа» встановлено розширення ParserFunctions, написане Тімом Старлінгом.

Цей модуль містить набір функцій парсера. Загальний синтаксис цих функцій такий:

{{#функція: аргумент 1 | аргумент 2 | аргумент 3…}}

Функції

#expr:

Функція expr виконує математичні обчислення над числами або змінними/параметрами, що приводяться до чисел.. Синтаксис:

{{ #expr: вираз }}

Підтримуються наступні оператори (перелічені в порядку, приблизно відповідному їх пріоритету):

ОператорДіяПриклад
{{#expr: 123456789012345}} = 1.2345678901234E+14
{{#expr: 0.000001}} = 1.0E-6
()Оператори групування{{#expr: (30 + 7) * 7 }} = 259
+Унарний знак +{{#expr: +30 * +7}} = 210
-Унарний знак - (інвертування знаку){{#expr: -30 * -7}} = 210
notУнарне або логічне НЕ{{#expr: not 0 * 7}} = 7
{{#expr: not 30+7}} = 7
*Множення{{#expr: 30 * 7}} = 210
/Ділення, еквівалент div{{#expr: 30 / 7}} = 4.2857142857143
divДілення, еквівалент /,
цілочисельного ділення немає
{{#expr: 30 div 7}} = 4.2857142857143
{{#expr: 5 div 2 * 2 + 5 mod 2}} = 6
modОстача від ділення, яке виконується над операндами, у яких відкинуті дробові частини.
Зверніть увагу, що div і mod працюють не так, як у звичайних мовах програмування.
{{#expr: 30 mod 7}} = 2
{{#expr: -8 mod -3}} = -2
{{#expr: -8 mod +3}} = -2
{{#expr: 8 mod 2.7}} = 0
{{#expr: 8 mod 3.2}} = 2
{{#expr: 8.9 mod 3}} = 2
+Додавання{{#expr: 30 + 7}} = 37
-Віднімання{{#expr: 30 - 7}} = 23
roundЗаокруглення лівого операнда до 1/10 в степені числа, вказаного справа{{#expr: 30 / 7 round 3}} = 4.286
{{#expr: 30 / 7 round 0}} = 4
{{#expr: 3456 round -2}} = 3500
=Рівність (чисельне і булеве порівняння){{#expr: 30 = 7}} = 0
<>Нерівність, еквівалент !={{#expr: 30 <> 7}} = 1
!=Нерівність, еквівалент <> і логічного xor{{#expr: 1 != 0}} = 1
<Менше{{#expr: 30 < 7}} = 0
>Більше{{#expr: 30 > 7}} = 1
<=Менше або рівне{{#expr: 30 <= 7}} = 0
>=Більше або рівне{{#expr: 30 >= 7}} = 1
andЛогічне І{{#expr: 4<5 and 4 mod 2}} = 0
orЛогічне АБО{{#expr: 4<5 or 4 mod 2}} = 1

Як завжди, краще поставити зайві дужки, ніж сушити голову над порядком обчислення

На виведенні логічних змінних 0 означає брехню, а 1 — істину.

Наприклад:

{{ #expr: (100 - 32) / 9 * 5 round 0 }}

видає:

38

Виконано перетворення 100° за Фаренгейтом в градуси за Цельсієм з округленням до найближчого цілого числа.

#if:

Функція if (англ. якщо) служить для створення конструкцій вигляду if-then-else. Її синтаксис такий:

{{ #if: <умова> | <текст, якщо умова істинна> | <текст, якщо умова помилкова> }}

Якщо умова — порожній рядок або складається тільки з пропусків, вважається, що умова не виконана, і повертається текст, якщо умова помилкова; якщо задана умова істинна, то при його виконанні повертається текст, якщо умова істинна. Останній параметр може бути опущений — в цьому випадку за помилкової умови буде повернений порожній рядок.

Зверніть увагу, що if не підтримує порівняння за допомогою «=» і інших математичних операцій. Так, {{#if: 1 = 2|так|ні}} поверне «так», оскільки рядок «1 = 2» не порожній. Для порівняння рядків використовуйте ifeq. Для порівняння чисел використовуйте ifexpr.

#ifeq:

Функція ifeq порівнює два рядки, повертаючи ще один рядок залежно від результату порівняння. Її синтаксис такий:

{{ #ifeq: <рядок для порівняння 1> | <рядок для порівняння 2> | <текст, якщо рівні> | <текст, якщо не рівні> }}

#ifexist:

Функція ifexist схожа за синтаксисом на if, тільки замість умови перевіряється існування сторінки з вказаним заголовком. Перевірка виконується з урахуванням регістру після приведення заголовка, що перевіряється, до канонічного вигляду (якщо на початку стоїть мала буква, то вона перетвориться на велику). Наприклад:

{{#ifexist:Вікіпедія:Довідка|Існує|Немає}} поверне Існує, оскільки сторінка Вікіпедія:Довідка існує.
{{#ifexist:вікіпедія:довідка|Існує|Немає}} поверне Існує, оскільки Вікіпедія:довідка при приведенні до канонічної форми дасть Вікіпедія:Довідка.
{{#ifexist:Вікіпедія:ДОВідка|Існує|Немає}} поверне Немає, оскільки сторінка Вікіпедія:ДОВідка не існує.

{{#ifexist}} не працює з відносними шляхами типу /підсторінка.

#ifexpr:

ifexpr обчислює математичний вираз і повертає один з двох рядків залежно від результату.

{{ #ifexpr: <вираз> | <текст, якщо істина> | <текст інакше> }}

Якщо результат обчислень рівний нулю — повертається другий текст, інакше — перший. Математичний синтаксис такий же, як у expr.

#switch:

switch порівнює одне значення з багатьма, повертаючи результат якщо знайдений збіг.

{{#switch: <comparison value> | <value1> = <result1> | <value2> = <result2> | ... | <valuen> = <resultn> | <default result>}}

#switch може використовуватися замість #ifeq:

{{#switch:a | a=true | false }} дає true
{{#ifeq:a | a | true | false }} дає true

#time:

#time — функція форматує час і дату. Синтаксис:

{{ #time: format }}

або

{{ #time: format | time }}

Якщо час не заданий, то використовується поточний.

Через кешування можлива відмінність між реальним часом і відображеним. Для ручного оновлення збережіть сторінку, не роблячи ніяких змін, або перейдіть за адресою http://uk.wikipedia.org/wiki/Назва_сторінки?action=purge

Аргумент format подібний до використовуваного у функції PHP date

СимволОписПрикладПоточне значення (очистити кеш для оновлення)
dДень місяця з нулем.0417
DКоротка назва дня тижня.ПнСр
jДень місяця без нуля.417
lПовна назва дня тижня.понеділоксереда
NНомер дня тижня ISO 86011 (понеділок) — 7 (неділя)3
wНомер дня тижня0 (неділя) — 6 (субота)3
zНомер дня року (починаючи з 0)0—365107
WНомер тижня ISO 860116
FПовна назва місяця в називному відмінку.січеньквітень
xgПовна назва місяця в родовому відмінку.січняквітня
mНомер місяця з нулем.01—1204
MКоротка назва місяця.веркві
nНомер місяця без нуля.1—124
tКількість днів в місяці28—3130
LПеревірка чи є рік високосним1 якщо рік високосний, інакше 01
YРік з 4 цифрами.20072024
yРік з 2 цифрами.0724
aam або pmam
AAM або PMAM
g12-годинний формат без 01—127
G24-годинний формат без 00—237
h12-годинний формат з 001—1207
H24-годинний формат з 000—2307
iХвилина з нулем.00—5927
sСекунда з нулем.00—5945
cISO 86012024-04-17T07:27:45+00:00
rRFC 2822Wed, 17 Apr 2024 07:27:45 +0000
UUNIX-час1713338865

Розширення PHP синтаксису:

СимволОпис
xnВиводить наступний числовий код в ASCII число. Наприклад, на мові хінді {{ #time:«H, xnH»}} виведе «०६, 06».
xrВиводить наступний числовий код римськими цифрами (тільки для чисел <3000). Наприклад, {{ #time:«Y, xrY»}} виведе «2024, MMXXIV».
xxБуква «x»

Всі інші символи будуть виведені без змін.

  • Фраза в подвійних лапках буде виведена без змін і лапок. Незакриті лапки вважатимуться символами.
    • {{ #time: "Сьогодні" l}} → Сьогодні середа
    • {{ #time:i’s"}} → 27’45"
  • Похилена вліво риска працює так само як і з PHP date(). \H виводить H, \" виводить ".

Формат параметра time ідентичний використовуваному в PHP strtotime(). Це можуть бути абсолютні і відносні дати, наприклад «11 грудня» і/або «+10 hours», що може використовуватися для перекладу часових зон.

  • {{ #time: j xg Y | -14 days }} → 3 квітня 2024 (14 днів тому)
  • {{ #time: H:i | +4 hours }} → 11:27 (UTC+4)
  • {{ #time: H:i | 8:15 +6 hours }} → 14:15

#rel2abs:

Функція #rel2abs перетворить відносний шлях посилання в абсолютний.

{{ #rel2abs: | path }}

Під відносним шляхом приймається такий, який починається з символів '/', './' або '../', а також просто '..' або '.'.

Приклад:

  • Якщо знаходитися на стор. Help:Foo/bar і викликати {{#rel2abs: ../baz}}, результатом повинно стати Help:Foo/baz
  • Якщо знаходитися на стор. Help:Foo і викликати {{#rel2abs: ../baz}}, результатом повинно стати baz
  • Якщо знаходитися на стор. Help:Foo і викликати {{#rel2abs: ../../baz}}, результатом повинно стати Помилка: неправильна глибина шляху: «Help:Foo/../../baz» (спроба доступу до вузла, що знаходиться вище, ніж кореневий)

Щоб не перевіряти, чи існує шуканий шлях, можна використовувати цю функцію в комбінації з #ifexist:

{{#ifexist: {{#rel2abs: ..}} | '..' exist | '..' does not exist}}

Якщо шлях, передаваний на вхід функції як параметр, не ідентифікований як відносний шлях, функція його поверне як результат. Наприклад:

{{#rel2abs: Help:Help}} повертає 'Help:Help'

#titleparts:

Функція #titleparts повертає підрядок до потрібного слеша. Основною метою є можливість отримання сторінок всіх рівнів, для яких дана є підсторінкою.

{{ #titleparts: title | bits }}

У разі, коли параметр bits рівний нулю, більше кількості рівнів статті або його неможливо перетворити в число, повертається title

Приклад:

  • {{#titleparts:Стаття/foo/bar|1}} поверне результат результат Стаття
  • {{#titleparts:Стаття/foo/bar|2}} поверне результат результат Стаття/foo
  • Якщо знаходитися на стор. Користувач:Foo/bar і викликати {{#titleparts:{{FULLPAGENAME}}|1}}, результатом повинно стати Користувач:Foo.
  • Якщо знаходитися на стор. Користувач:Foo/bar і викликати {{#titleparts:{{PAGENAME}}|1}}, результатом повинно стати Foo.

#iferror:

{{#iferror: вираз | при помилці | якщо правильно }}

Повертає при помилці якщо вираз містить <strong class="error"> згенеровану #expr, #ifexpr, #time, #rel2abs, чи якимись іншими ситуаціями MediaWiki (наприклад, рекурсією або нескінченними циклами). Буває корисним для перехоплення неправильного вводу в парсерних функціях. Наприклад:

  • {{#iferror:{{#expr:1+1}}|невірний ввід|правильний вираз}} видає правильний вираз
  • {{#iferror:{{#expr:1+Z}}|невірний ввід|правильний вираз}} видає невірний ввід

Останні два параметрами не є обов'язковими. Якщо параметр якщо правильно опущено, то видається вираз. Якщо параметр при помилці теж опущений, при помилці нічого не виводиться, а при правильному виразі повертається вираз.

  • {{#iferror:{{#expr:1+1}}|невірний ввід}} видає 2
  • {{#iferror:{{#expr:1+Z}}|невірний ввід}} видає невірний ввід
  • {{#iferror:{{#expr:1+1}}}} видає 2
  • {{#iferror:{{#expr:1+Z}}}} видає

Тому:

  • {{#iferror: вікітекст | альтернатива }} означає відображення вікітексту при коректному вводі, інакше відображення альтернативи.
  • {{#iferror: вікітекст }} означає відображення вікітексту при коректному вводі".

Інші

ФункціяОпис
{{#babel:code1|code2|...}}Відображає юзербокси ваших знань мов. Як його альтернатива — шаблон {{Babel}}.
{{#coordinates:arg1|arg2|...}}Зберігає географічні координати предмету у базу даних сторінок. Використано у шаблоні {{coord}}.
{{#invoke:module|function|arg1|arg2 |...}}Викликає (Lua) функцію в модулі Scribunto
{{#language:lang code 1|lang code 2}}відображає назву мови за мовним кодом її власною мовою, або мовою коду lang code2.
{{#property:arg1|arg2|...}} Включає властивість Вікіданих із прив'язаної сторінки (Вікіданих). Код властивості передається як аргумент. Напр. {{#property:P21}} виведе стать людини, якщо така властивість вказана на прив'язаній сторінці Вікіданих.
Виклик {{#property:P21|from=Q239864}} повертає жіноча — стать Джун Гевок (на Вікіданих Q239864).
{{#special:userlogin}} = Спеціальна:Вхід[MW1.? r17321+] Локальна назва наданої спеціальної сторінки.
{{#tag:tagname|content|attr1="val1"|attr2="val2"}} =

<tagname attr1="val1" attr2="val2">content</tagname>

[MW1.12+, r29482] Перетворює атрибути та вміст у тег в стилі XML. Дивіться також Дефект 2257 та Розширення:TagParser.
{{#target:fullpagename}}Send a message to a list talk pages on the fullpagename, using the MassMessage function.
{{int:pagename}} Transclude a page from the MediaWiki namespace interface according to the user's language preferences. Наприклад, a system message.

Встановлення

Заладуйте усі п'ять вказаних нижче файлів і встановіть їх у нову директорію ParserFunctions в директорії розширень MediaWiki.

Потім додайте в кінець файлу LocalSettings.php рядок

require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" );

Дерево коду можна подивитися тут:

Посилання

Див. також

🔥 Top keywords: Файл:Pornhub-logo.svgГоловна сторінкаPorno for PyrosБрати КапрановиСпеціальна:ПошукUkr.netНові знанняЛіга чемпіонів УЄФАХ-69Файл:XVideos logo.svgСлобоженко Олександр ОлександровичPornhubЧернігівYouTubeУкраїнаЛунін Андрій ОлексійовичІскандер (ракетний комплекс)Шевченко Тарас ГригоровичATACMSДень працівників пожежної охорониВірастюк Василь ЯрославовичВікторія СпартцАлеппоFacebookГолос УкраїниКиївПетриченко Павло ВікторовичДуров Павло ВалерійовичСексФолаутТериторіальний центр комплектування та соціальної підтримкиTelegramНаселення УкраїниГай Юлій ЦезарЛеся УкраїнкаОхлобистін Іван ІвановичOLXДруга світова війнаЗагоризонтний радіолокатор