Help:Extension:ParserFunctions

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Help:Extension:ParserFunctions and the translation is 87% complete.

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎Lëtzebuergesch • ‎Nederlands • ‎Tiếng Việt • ‎Türkçe • ‎Zazaki • ‎català • ‎español • ‎français • ‎galego • ‎italiano • ‎magyar • ‎polski • ‎português • ‎português do Brasil • ‎slovenščina • ‎suomi • ‎svenska • ‎български • ‎русский • ‎українська • ‎հայերեն • ‎العربية • ‎فارسی • ‎پښتو • ‎मराठी • ‎বাংলা • ‎தமிழ் • ‎ไทย • ‎中文 • ‎日本語 • ‎한국어

Розширення ParserFunctions впроваджує одинадцять додаткових функцій парсера на додачу до "магічних слів", які вже присутні у MediaWiki. (Можна налаштувати конфігурацію для впровадження інших функцій парсера для обробки текстових рядків; ці функції для рядків задокументовані в іншому місці.) Всі парсерні функції впроваджені цим розширенням мають таку форму:

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

#expr

Тип Оператори
Групування (круглі дужки) ( )
Числа 1234.5   e (2.718)   pi (3.142)
бінарний оператор e   унарний +,-
Унарні not ceil trunc floor abs exp ln sin cos tan acos asin atan
Бінарні ^
* / div mod
+ -
Округлення round
Логічні = != <> > < >= <=
and
or

Ця функція обчислює математичний вираз і повертає обчислене значення. Ця функція також доступна в Scribunto під назвою mw.ext.ParserFunctions.expr.

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

Всі доступні оператори перелічені в таблиці справа, в порядку пріорітету. Див. Help:Calculation для детальнішої інформації про роботу кожного з операторів. Точність та формат поверненого результуючого значення відрізняються в залежності від операційної системи сервера, на якому встановлена вікі, та від формату чисел загальноприйнятого для мови сайту.

У виразах що використовують булеву алгебру, нуль приймає значення false, а всі інші значення, як додатні, так і від'ємні, приймають значення true:

{{#expr: 1 and -1 }}1
{{#expr: 1 and 0 }}0
{{#expr: 1 or -1 }}1
{{#expr: -1 or 0 }}1
{{#expr: 0 or 0 }}0

Отримавши на вході порожній вираз, функція повертає порожній рядок. Некоректні вирази призводять до повернення одного чи декількох повідомлень про помилку, які можна перехопити використовуючи функцію #iferror:

{{#expr: }}
{{#expr: 1+ }}Expression error: Missing operand for +.
{{#expr: 1 = }}Expression error: Missing operand for =.
{{#expr: 1 foo 2 }}Expression error: Unrecognized word "foo".

Порядок операторів додавання та віднімання перед чи після числа має значення і може бути сприйнятий як додатне чи від'ємне число, а не як вираз із помилкою:

{{#expr: +1 }}1
{{#expr: -1 }}-1
{{#expr: + 1 }}1
{{#expr: - 1 }}-1

Зверніть увагу, що при використання у виразі значення поверненого магічним словом, необхідно спочатку привести це значення до "сирого" формату щоб прибрати всі пробіли між цифрами і перевести цифри до арабських. Наприклад, {{NUMBEROFUSERS}} повертає значення 16 676 638, при тому що потрібним значенням є 16676638, яке можна отримати за допомогою {{formatnum:{{NUMBEROFUSERS}}|R}}. Це особливо важливо для деяких мов, де числа записуються не арабськими цифрами. Наприклад, для бенгальської мови {{NUMBEROFUSERS}} поверне ৩০,০৬১.

{{#expr:{{NUMBEROFUSERS}}+100}} Expression error: Unrecognized punctuation character " ".
{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}16676738
Увага Увага: Оператор mod дає неправильні результати для деяких значень другого аргументу:
{{#expr: 123 mod (2^64-1)}}Division by zero. (повертає повідомлення про помилку, хоча має повернути 123)
Якщо необхідно здійснити обчислення із датами (наприклад, перевірити чи поточні дата і час є пізнішими ніж деякі задані дата і час), спершу переведіть час в кількість секунд що пройшли з 1 січня 1970 використовуючи {{#time: xNU }}, після чого можна просто віднімати та додавати дати як числа.

Округлення

Оператор округлення округляє число зліва від нього до 1/10 в степені числа справа (в якому дробова частина відкидається).

Для округлення до більшого чи меншого цілого значення використовуються унарні оператори ceil та floor відповідно.

Вираз Результат Метод округлення
{{#expr: 1/3 round 5 }} 0.33333 Остання цифра (3) є меншою за 5, тому округлення не відбувається
{{#expr: 1/6 round 5 }} 0.16667 Остання цифра (6) є більшою за 5, тому округлення відбувається
{{#expr: 8.99999/9 round 5 }} 1 І знову, результат округляється відповідно до останньої цифри і це призводить до додаткового округлення
{{#expr: 1234.5678 round -2 }} 1200 Округлено до найближчого числа кратного 100, оскільки від'ємна експонента (число справа) округляє вліво від десяткової точки
{{#expr: 1234.5678 round 2 }} 1234.57 Округлено до найближчої сотої частини, оскільки додатня експонента (число справа) округляє вправо від десяткової точки
{{#expr: 1234.5678 round 2.3 }} 1234.57 Дробова частина експоненти не враховується і не впливає на результат округлення
{{#expr: trunc 1234.5678 }} 1234 Відкидання дробової частини
Округлення до найближчого цілого числа
{{#expr: 1/3 round 0 }} 0 Округлення до найближчого цілого числа, в даному випадку до нуля, який є меншим за вхідне значення
{{#expr: 1/2 round 0 }} 1 Округлення до найближчого цілого числа, в даному випадку до одиниці, яка є більшою за вхідне значення
{{#expr: 3/4 round 0 }} 1 Округлення до найближчого цілого числа, в даному випадку до одиниці, яка є більшою за вхідне значення
{{#expr: -1/3 round 0 }} -0 Округлення до найближчого цілого числа, в даному випадку до онуля, який є більшим за вхідне значення
{{#expr: -1/2 round 0 }} -1 Округлення до найближчого цілого числа, яке є від'ємним та меншим за вхідне значення
{{#expr: -3/4 round 0 }} -1 Округлення до найближчого цілого числа, яке є від'ємним та меншим за вхідне значення
Округлення до більшого чи меншого цілого значення за допомогою ceil та floor
{{#expr: ceil(1/3) }} 1 Округлення до наступного більшого цілого числа, в даному випадку до одиниці
{{#expr: floor(1/3) }} 0 Округлення до наступного меншого цілого числа, в даному випадку до нуля
{{#expr: ceil(-1/3) }} -0 Округлення до наступного більшого цілого числа, в даному випадку до нуля
{{#expr: floor(-1/3) }} -1 Округлення до наступного меншого цілого числа, яке є від'ємним
{{#expr: ceil 1/3 }} 0.33333333333333 Не округлено, оскільки 1 вже і так ціле число
Увага Увага: Інтерпритовано як (ceil 1)/3, а не ceil(1/3), як того можна очікувати


Текстові рядки

Математичні вирази можуть містити лише числа, вони не можуть порівнювати текстові рядки або символи. Для цього слід використовувати функцію #ifeq.

{{#expr: "a" = "a" }}Expression error: Unrecognized punctuation character """.
{{#expr: a = a }}Expression error: Unrecognized word "a".
{{#ifeq: a | a | 1 | 0 }}1

#if

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

{{#if: тестовий рядок | значення, якщо тестовий рядок не порожній | значення, якщо тестовий рядок порожній (або містить тільки пробільні символи) }}
{{#if: перший параметр | другий параметр | третій параметр }}

Спершу функція перевіряє чи не є перший параметр порожнім. Якщо він не порожній, функція виводить другий параметр. Якщо параметр порожній або містить тільки пробільні символи (пробіли, символи перенесення рядка тощо), функція виводить третій параметр.

{{#if: | yes | no}}no
{{#if: string | yes | no}}yes
{{#if:      | yes | no}}no
{{#if:


| yes | no}}
no

Тестовий рядок завжди інтерпретується як текстовий, математичні вирази не вираховуються:

{{#if: 1==2 | yes | no }}yes
{{#if: 0 | yes | no }}yes

Останній аргумент може бути відсутнім:

{{#if: foo | yes }} yes
{{#if: | yes }}
{{#if: foo | | no}}

Функція може бути вкладеною. Для цього внутрішня функція #if у повній формі розміщується на місці параметра охоплюючої функції #if. Допускається не більше семи рівнів вкладеності, хоча це може залежати від вікі або обмеження пам'яті.

{{#if: тестовий рядок | значення, якщо тестовий рядок не порожній | {{#if: тестовий рядок | значення, якщо тестовий рядок не порожній | значення, якщо тестовий рядок порожній (або містить тільки пробільні символи) }} }}

Також, можна використовувати параметр в якості тестового рядку у функції #if. Необхідно переконатися, що ви додано символ | (вертикальна риска) після імені змінної.

{{#if:{{{1|}}}|Ви ввели текст у змінній 1|Тексту у змінній 1 немає }}

Див. Help:Parser functions in templates для інших прикладів використання цієї функції парсера.

#ifeq

Ця функція парсера порівнює два введені рядки, визначає чи є вони ідентичними та повертає один з двох текстових рядків залежно від результату. Якщо потрібно порівняти більше текстових рядків із можливістю повернення більшої кількості рядків, використовуйте функцію #switch.

{{#ifeq: string 1 | string 2 | value if identical | value if different }}

Якщо обидва текстові рядки є числовими значеннями, вони порівнюються як числа:

{{#ifeq: 01 | 1 | equal | not equal}}equal
{{#ifeq: 0 | -0 | equal | not equal}}equal
{{#ifeq: 1e3 | 1000 | equal | not equal}}equal
{{#ifeq: {{#expr:10^3}} | 1000 | equal | not equal}}equal

В іншому разі порівнюється текст; це порівняння чутливе до регістру:

{{#ifeq: foo | bar | equal | not equal}}not equal
{{#ifeq: foo | Foo | equal | not equal}}not equal
{{#ifeq: "01" | "1" | equal | not equal}}not equal  (порівняти з подібним прикладом вище, без лапок)
{{#ifeq: 10^3 | 1000 | equal | not equal}}not equal  (порівняти з подібним прикладом вище, з #expr)

В якості практичного прикладу, розглянемо існуючий шаблон Template:Timer який використовує парсер для вибору між двома відрізками часу, коротким та довгим. Він бере параметр в якості першого аргумента і порівнює його із текстовим рядком "short" – порядок розміщення цих рядків не має значення, але легше читати якщо параметр йде першим. Код шаблона виглядає так:

{{#ifeq: {{{1|}}} | short | 20 | 40 }}

і працює таким чином:

{{timer|short}}20
{{timer|20}}40
{{timer}}40
Увага Увага: Функція #ifexpr не здійснює порівняння чисел так само як і функції #ifeq та #switch. Останні дві є більш точними за #ifexpr. Зверніть увагу на такий приклад, де порівнюються два числа що відрізняються лише останньою цифрою:
{{#ifeq: 12345678901234567 | 12345678901234568 | equal | not equal}}not equal
{{#switch: 12345678901234567 | 12345678901234568 = equal | not equal}}not equal

Оскільки код PHP який використовується в #ifeq та #switch порівнює два числа як цілі числа, то вони повертають очікуваний коректний результат. Однак, #ifexpr для тих самих чисел:

{{#ifexpr: 12345678901234567 = 12345678901234568 | equal | not equal}}equal
Оскільки останні цифри цих чисел відрізняються, результат "equal" є неправильним. Така поведінка #ifexpr пояснюється тим, що MediaWiki перетворює числа у виразах на числа з рухомою комою, що для великих чисел, як ті що використані в прикладі, передбачає деяку степінь округлення.

Увага Увага: При використанні всередині функції парсера, будь-які теги та інші функції парсера мають бути замінені на унікальний код. Це впливає на порівняння таким чином:
{{#ifeq: <nowiki>foo</nowiki> | <nowiki>foo</nowiki> | equal | not equal}}not equal
{{#ifeq: <math>foo</math> | <math>foo</math> | equal | not equal}}not equal
{{#ifeq: {{#tag:math|foo}} | {{#tag:math|foo}} | equal | not equal}}not equal
{{#ifeq: [[foo]] | [[foo]] | equal | not equal}}equal
Якщо текстові рядки які необхідно порівняти є однаковими викликами одного шаблону що містять теги, то повертається значення true, але у випадку виклику двох шаблонів із однаковим вмістом що містить теги, повертається false.
Увага Увага: Порівняння текстового рядка із магічним словом, яке повертає назву сторінки, може не спрацювати залежно від конфігурації сайту. Наприклад, {{FULLPAGENAME}}, залежно від вікі, може зробити першу літеру великою і замінити всі пробіли на знаки підкреслення.

To work around this, apply the magic word to both parameters:

{{#ifeq: {{FULLPAGENAME: L'Aquila}} | {{FULLPAGENAME}} | equal | not equal}}equal

#iferror

Функція приймає на вході текстовий рядок і повертає значення true якщо цей рядок містить об'єкт HTML із class="error", який був згенерований іншою функцією парсера, зокрема #expr, #time або #rel2abs, або був згенерований шаблоном з помилкою, такою як нескінченний цикл або рекурсія, або виник внаслідок іншої помилки.

{{#iferror: test string | value if error | value if correct }}

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

{{#iferror: {{#expr: 1 + 2 }} | error | correct }}correct
{{#iferror: {{#expr: 1 + X }} | error | correct }}error
{{#iferror: {{#expr: 1 + 2 }} | error }}3
{{#iferror: {{#expr: 1 + X }} | error }}error
{{#iferror: {{#expr: 1 + 2 }} }}3
{{#iferror: {{#expr: 1 + X }} }}
{{#iferror: {{#expr: . }} | error | correct }}correct
{{#iferror: <strong class="error">a</strong> | error | correct }}error

#ifexpr

Ця функція обчислює математичний вираз та повертає один з двох текстових рядків залежно від логічного значення результату:

{{#ifexpr: expression | value if true | value if false }}

Вираз expression обчислюється так само як і у функції #expr, з використанням тих самих операторів. Результат виразу, після цього, трактується як логічне значення.

Порожній вхідний вираз трактується як false:

{{#ifexpr: | yes | no}}no

Як сказано вище, нуль приймає значення false, а будь-яке ненульове значення приймає значення false, тому ця функція еквівалентна до використання #expr всередині #ifeq:

{{#ifeq: {{#expr: expression }} | 0 | value if false | value if true }}

за винятком порожнього виразу чи виразу із помилкою (повідомлення про помилку вважається порожнім рядком; воно не рівне нулю, тому застосовується value if true).

{{#ifexpr: = | yes | no }} Expression error: Unexpected = operator.

в порівнянні з

{{#ifeq: {{#expr: = }} | 0 | no | yes }} yes

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

{{#ifexpr: 1 > 0 | yes }}yes
{{#ifexpr: 1 < 0 | yes }}
{{#ifexpr: 0 = 0 | yes }} yes
{{#ifexpr: 1 > 0 | | no}}
{{#ifexpr: 1 < 0 | | no}} no
{{#ifexpr: 1 > 0 }}

#ifexist

Ця функція бере на вході текстовий рядок, інтерпритує його як назву сторінку, та повертає один з двох текстових рядків залежно від того чи існує сторінка на цій вікі.

{{#ifexist: page title | value if exists | value if doesn't exist }}

Функція повертає true якщо сторінка існує, незалежно від того чи є на ній видимий вміст чи вона є порожньою (містить тільки метадані такі як посилання на категорії, магічні слова або перенаправлення, але не містить видимого вмісту, або ж і взагалі є повністю порожньою). Тільки сторінки які є "червоними посиланнями" повертають значення false, включаючи сторінки що існували раніше але були видалені.

{{#ifexist: Help:Extension:ParserFunctions/uk | exists | doesn't exist }}exists
{{#ifexist: XXHelp:Extension:ParserFunctions/ukXX | exists | doesn't exist }}doesn't exist

Функція повертає значення true системних повідомлень що були адаптовані та для спеціальних сторінок які задані програмним забезпеченням.

{{#ifexist: Special:Watchlist | exists | doesn't exist }}exists
{{#ifexist: Special:CheckUser | exists | doesn't exist }}exists (оскільки на цій вікі встановлене розширення CheckUser)
{{#ifexist: MediaWiki:Copyright | exists | doesn't exist }}exists (оскільки MediaWiki:Copyright було адаптовано)

Якщо на одній сторінці перевіряється існування другої за допомогою #ifexist:, то перша (та на якій перевіряється) з'явиться в списку Special:WhatLinksHere для другої (та яка перевіряється). Тому, якщо {{#ifexist:Foo }} було би включене до цієї сторінки, то Help:Extension:ParserFunctions/uk з'явилась би в списку Special:WhatLinksHere/Foo.

На вікі, які використовують спільний репозиторій медіафайлів (зокрема Вікісховище), функція #ifexist: може бути використана для перевірки того чи існує файл із такою назвою, і функція перевірить існування файлу на репозиторії, а не на самій вікі:

{{#ifexist: File:Example.png | exists | doesn't exist }}doesn't exist
{{#ifexist: Image:Example.png | exists | doesn't exist }}doesn't exist
{{#ifexist: Media:Example.png | exists | doesn't exist }}exists

Якщо була створена сторінка опису файла на цій вікі, то для всіх трьох попередніх прикладів результатом буде exists.

Функція #ifexist: не працює з міжмовними посиланнями (інтервікі).

Обмеження

Функція #ifexist: вважається "ресурсомісткою функцією парсера", тому кількість викликів цієї функції з однієї сторінки є обмеженою (включаючи виклики зроблені в шаблонах, що включаються до сторінки). Коли це обмеження перевищене, всі подальші виклики функції #ifexist: завжди повертатимуть "false", не залежно від того чи існує сторінка чи ні. Також, сторінки із таким перевищенням обмеження додаються до категорії спостереження Category:Pages with too many expensive parser function calls, чия назва може відрізнятися залежно від мови вікі.

Для деяких випадків можливо імітувати функцію "ifexist" за допомогою CSS, використовуючи селектори a.new (щоб вибрати посилання на неіснуючі статті) або a:not(.new) (щоб вибрати посилання на існуючі статті). Крім того, оскільки максимальна кількість викликів ресурсомістких функцій на одній сторінці вказана в $wgExpensiveParserFunctionLimit, то можна пвказати більшу кількість у файлі LocalSettings.php за потреби.

#rel2abs

Ця функція перетворює відносний шлях до файла на абсолютний.

{{#rel2abs: шлях }}
{{#rel2abs: шлях | основний шлях }}

В аргументі шлях можливе використання такого синтаксису:

  • . → поточний рівень
  • .. → вверх на один рівень
  • /foo → вниз на один рівень до вкладеної папки /foo"

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

{{#rel2abs: /quok | Help:Foo/bar/baz }}Help:Foo/bar/baz/quok
{{#rel2abs: ./quok | Help:Foo/bar/baz }}Help:Foo/bar/baz/quok
{{#rel2abs: ../quok | Help:Foo/bar/baz }}Help:Foo/bar/quok
{{#rel2abs: ../. | Help:Foo/bar/baz }}Help:Foo/bar

Неправильний синтаксис, такий як /. або /./, ігнорується.

{{#rel2abs: ../quok/. | Help:Foo/bar/baz }}Help:Foo/bar/quok
{{#rel2abs: ../../quok | Help:Foo/bar/baz }}Help:Foo/quok
{{#rel2abs: ../../../quok | Help:Foo/bar/baz }}quok
{{#rel2abs: ../../../../quok | Help:Foo/bar/baz }}Error: Invalid depth in path: "Help:Foo/bar/baz/../../../../quok" (tried to access a node above the root node).

#switch

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

{{#switch: comparison string
 | case = result
 | case = result
 | ...
 | case = result
 | default result
}}

Приклади:

{{#switch: baz | foo = Foo | baz = Baz | Bar }} Baz
{{#switch: foo | foo = Foo | baz = Baz | Bar }} Foo
{{#switch: zzz | foo = Foo | baz = Baz | Bar }} Bar

Функція #switch з тегами частково включення може використовуватись в конфігураційних файлах, що дає змогу користувачам незнайомим з шаблонами переглядати та змінювати конфігуровані елементи.

За замовчуванням

Результат за замовчуванням повертається якщо жоден випадок не збігається із рядком для порівняння:

{{#switch: test | foo = Foo | baz = Baz | Bar }} Bar

Результат за замовчуванням має бути останнім аргументом і не повинен містити знак рівності.

{{#switch: test | Bar | foo = Foo | baz = Baz }} →
{{#switch: test | foo = Foo | baz = Baz | B=ar }} →

Або можна прямо вказати результат за замовчуванням вказавши "#default" в якості випадку.

{{#switch: comparison string
 | case = result
 | case = result
 | ...
 | case = result
 | #default = default result
}}

Результати за замовчуванням вказані таким способом можна розмістити будь-де всередині функції:

{{#switch: test | foo = Foo | #default = Bar | baz = Baz }} Bar

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

{{#switch: test | foo = Foo | baz = Baz }}

Групування результатів

Можна зробити "провалювання" (об'єднання) одних випадків в інші. Тоді декілька випадків повернуть той самий результат. Це мінімізує повторення коду.

{{#switch: comparison string
 | case1 = result1
 | case2 
 | case3 
 | case4 = result234
 | case5 = result5
 | case6 
 | case7 = result67
 | #default = default result
}}

Тут випадки 2, 3 та 4 повертають однаковий результат result234; Обоє випадки 6 та 7 повернуть result67.

Нюанси порівняння

Так само як і в #ifeq, якщо рядок для порівнянна та випадок є числами, вони порівнюються як числа. В іншому випадку вони вважаються текстовими рядками чутливими до реєстру:

{{#switch: 0 + 1 | 1 = one | 2 = two | three}} → three
{{#switch: {{#expr: 0 + 1}} | 1 = one | 2 = two | three}} → one
{{#switch: a | a = A | b = B | C}} → A
{{#switch: A | a = A | b = B | C}} → C

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

{{#switch: | = Nothing | foo = Foo | Something }}Nothing

Як тільки знайдено збіг, всі подальші випадки ігноруються:

{{#switch: b | f = Foo | b = Bar | b = Baz | }}Bar
Увага Увага: Порівняння чисел в #switch та #ifeq здійснюються відмінно від того як це робиться у математичних виразах (див. вище):
{{#switch: 12345678901234567 | 12345678901234568 = A | B}} → B
{{#ifexpr: 12345678901234567 = 12345678901234568 | A | B}} → A

Буквальне включення знаку рівності

Текстові рядки випадків не можуть містити знаків рівності. Щоб обійти це обмеження, створіть шаблон {{=}} що міститиме лише знак рівності - =, або замість символу рівності вставте його HTML-код &#61;.

Приклад:

{{#switch: 1=2
 | 1=2 = raw
 | 1<nowiki>=</nowiki>2 = nowiki
 | 1{{=}}2 = template
 | default
}}template


{{#switch: 1=2
 | 1&#61;2 = html
 | default
}}html

Note Note: Реальний простий приклад використання функції "#switch" можна побачити в шаблоні Template:NBA color. Двома складнішими прикладами є Template:Extension та Template:BOTREQ.

Заміна #ifeq

Функція #switch може використовуватись для зниження рівня вкладеності.

Наприклад:

  • {{#switch:{{{1}}} |condition1=branch1 |condition2=branch2 |condition3=branch3 |branch4}}

є еквівалентними до

  • {{#ifeq:{{{1}}}|condition1 |branch1 |{{#ifeq:{{{1}}}|condition2 |branch2 |{{#ifeq:{{{1}}}|condition3 |branch3 |branch4}}}}}}

i.e. deep nesting, linear:

{{#ifeq:{{{1}}}|condition1
  |<!--then-->branch1
  |<!--else-->{{#ifeq:{{{1}}}|condition2
                |<!--then-->branch2
                |<!--else-->{{#ifeq:{{{1}}}|condition3
                              |<!--then-->branch3
                              |<!--else-->branch4}}}}}}

On the other hand, the switch replacement could be complicated/impractical for IFs nested in both branches (shown with alternatives of indentation, indented on both sides), making full symmetrical tree:

{{#ifeq:{{{1}}}|condition1
 |<!--then-->branch1t{{
  #ifeq:{{{1}}}|condition2
   |<!--then-->branch1t2t{{#ifeq:{{{1}}}|condition4|<!--then-->branch1t2t4t|<!--else-->branch1t2t4e}}
   |<!--else-->branch1t2e{{#ifeq:{{{1}}}|condition5|<!--then-->branch1t2e5t|<!--else-->branch1t2e5e}}
  }}
 |<!--else-->branch1e{{#ifeq:{{{1}}}|condition3
   |<!--then-->branch1e3t{{#ifeq:{{{1}}}|condition6|branch1e3t6t|branch1e3t6e}}
   |<!--else-->branch1e3e{{
    #ifeq:{{{1}}}|condition7
     |branch1e3e7t
     |branch1e3e7t
    }}
  }}
}}

#time

Код Опис Результат для поточного моменту
(Очистіть кеш цієї сторінки для оновлення результатів)
Рік
Y Рік в чотирьох цифрах. 2019
y Останні дві цифри року. 19
L 1 якщо рік високосний, 0 якщо ні. 0
o[note 1] Рік вказаного тижня відповідно до ISO-8601.[note 2] 2019[note 3]
  1. Потребує PHP версії 5.1.0 або новіше та rev:45208.
  2. Має те саме значення що і Y, окрім випадку коли номер тижня (W) за ISO належить до попереднього чи наступного року, в якому повертається цей рік.
  3. Поверне рядок o, якщо не виконуються умови першої примітки.
Місяць
n Номер місяця без додавання нуля спереду. 1
m Номер місяця із додаванням нуля спереду за потреби. 01
M Скорочена назва місяця мовою сайту. січ
F Повна назва місяця мовою сайту. січень
xg Виводить повну назву місяця в родовому відмінку мовою сайту, для розділення родового та називного відмінку. Така можливість є корисною для багатьох слов'янських мов, наприклад польської, російської, білоруської, чеської, словацької, словенської, української тощо. Для польської мови:
{{#time:F Y|June 2010|pl}} → czerwiec 2010
(називний відмінок)
{{#time:d xg Y|20 June 2010|pl}} → 20 czerwca 2010
(родовий відмінок)
День місяця або року
j День місяця без додавання нуля спереду. 23
d День місяця із додаванням нуля спереду за потреби. 23
z День року (1 січня = 0).
Note Note: Щоб отримати день року за ISO, додайте 1.
22
Тиждень та день тижня
W Номер тижня за ISO 8601 із додаванням нуля спереду за потреби. 04
N Номер дня тижня за ISO 8601 (понеділок = 1, неділя = 7). 3
w Номер дня тижня (неділя = 0, субота = 6). 3
D Скорочення назви дня тижня. Перекладено не на всі мови. Ср
l Повна назва дня тижня. Перекладено не на всі мови. середа
Година
a "am" в першій половині дня (00:00:00 → 11:59:59), "pm" в другій (12:00:00 → 23:59:59). am
A Те саме що і a зверху, тільки великими літерами. AM
g Година в 12-годинному форматі без додавання нуля спереду. 2
h Година в 12-годинному форматі із додаванням нуля спереду за потреби. 02
G Година в 24-годинному форматі без додавання нуля спереду. 2
H Година в 24-годинному форматі із додаванням нуля спереду за потреби. 02
Хвилини та секунди
i Хвилини із додаванням нуля спереду за потреби. 51
s Секунди із додаванням нуля спереду за потреби. 22
U Час Unix. Кількість секунд що пройшли із 1 січня 1970 року, 00:00:00 GMT. 1548211882
Часовий пояс (відповідно до 1.22wmf2)
e Ідентифікатор часового поясу. UTC
I Чи належить дата до періоду літнього часу. 0
O Різниця із часом за Гринвічем (GMT) +0000
P Різниця із часом за Гринвічем (GMT) з двокрапкою +00:00
T Абревіатура часового поясу. UTC
Z Різниця часових поясів у секундах. 0
Різне
t Кількість днів у поточному місяці. 31
c Дата форматована за ISO 8601, еквівалентна до Y-m-d"T"H:i:s+00:00. 2019-01-23T02:51:22+00:00
r Дата форматована за RFC 5322, еквівалентна до D, j M Y H:i:s +0000, де назва дня тижня та назва місяця тільки англійською. Wed, 23 Jan 2019 02:51:22 +0000
Негрегоріанські календарі
Мусульманський
xmj День місяця. 16
xmF Повна назва місяця. джумада аль-авваля
xmn Номер місяця. 5
xmY Рік повністю. 1440
Іранський
xit Кількість днів у поточному місяці. 30
xiz День року. 308
xij День місяця. 3
xiF Повна назва місяця. бахмана
xin Номер місяця. 11
xiY Рік повністю. 1397
xiy Останні дві цифри року. 97
Єврейський
xjj День місяця. 17
xjF Повна назва місяця. Шват
xjt Кількість днів у поточному місяці. 30
xjx Назва місяця в родовому відмінку. Швата
xjn Номер місяця. 5
xjY Рік повністю. 5779
Тайський сонячний
xkY Рік повністю.
Note Note: Для років до 1941, дати в періоді Ян-Мар рахуються неправильно.
2562
Міньго/Чучхе
xoY Рік повністю. 108
Японське ненґо
xtY Рік повністю. 平成31
Прапори
xn Форматувати наступний числовий код як число в ASCII. В мові гінді, {{#time:H, xnH}} повертає ०६, 06.
xN Те саме що і xn, але як переключений прапор, який діє аж до кінця рядка або до наступної появи xN в текстовому рядку.
xr Форматує наступне число у вигляді числа із римськими цифрами. Працює тільки для чисел що не перевищують 10 000
(3 000 в MediaWiki до версії 1.20).
{{#time:xrY}} → MMXIX
xh Форматує наступне число у вигляді числа із єврейськими цифрами. {{#time:xhY}} → ב'י"ט

Ця функція парсера приймає дату та/або час (за Грегоріанським календарем) і форматує їх відповідно до заданого синтаксису. Можна задати об'єкт дати/часу; за замовчуванням береться значення магічного слова {{CURRENTTIMESTAMP}}, яке містить час коли поточна сторінка в останнє трансформувалась в HTML.

{{#time: format string }}
{{#time: format string | date/time object }}
{{#time: format string | date/time object | language code }}

Список допустимих кодів форматування наведено в таблиці справа. Будь-який символ в текстовому рядку для форматування, який не розпізнано, включається до результату без змін; це стосується також і пробілів (для інтерпритації коду системі вони не потрібні). Існує два способи уникнення трактування символу як коду форматування:

  1. Обернена коса риска після якої йде символ, трактується як просто цей символ;
  2. Символи всередині подвійних лапок так і залишаються символами, а лапки відкидаються.

До того ж, подвійний символ xx трактується я один символ "x".

{{#time: Y-m-d }}2019-01-23
{{#time: [[Y]] m d }}2019 01 23
{{#time: [[Y (year)]] }}2019 (19UTCamWed, 23 Jan 2019 02:51:22 +0000)
{{#time: [[Y "(year)"]] }}2019 (year)
{{#time: i's" }}51'22"

Об'єкт дати/часу можна задавати в будь-якому форматі який допускається у функції strtotime() мови PHP. Час можна вказувати як абсолютно (наприклад 20 December 2000), так і відносно (наприклад +20 hours, тобто "+20 годин").

{{#time: r|now}}Wed, 23 Jan 2019 02:51:23 +0000
{{#time: r|+2 hours}}Wed, 23 Jan 2019 04:51:23 +0000
{{#time: r|now + 2 hours}}Wed, 23 Jan 2019 04:51:23 +0000
{{#time: r|20 December 2000}}Wed, 20 Dec 2000 00:00:00 +0000
{{#time: r|December 20, 2000}}Wed, 20 Dec 2000 00:00:00 +0000
{{#time: r|2000-12-20}}Wed, 20 Dec 2000 00:00:00 +0000
{{#time: r|2000 December 20}}Error: Invalid time.

Код мови у форматі ISO 639-3 дозволяє відобразити результат обраною мовою:

{{#time:d F Y|1988-02-28|nl}}28 februari 1988
{{#time:l|now|uk}}середа
{{#time:d xg Y|20 June 2010|pl}}20 czerwca 2010

Час Unix можна використовувати для підрахунку дати, якщо поставити перед ним символ @.

{{#time: U | now }}1548211883
{{#time: r | @1548211882 }}Wed, 23 Jan 2019 02:51:22 +0000
Увага Увага: Без вказання символу @ перед часом Unix, результатом зазвичай буде помилка, або ж неочікуване значення:
{{#time: r | 1970-01-01 00:16:39 }}Thu, 01 Jan 1970 00:16:39 +0000
{{#time: U | 1970-01-01 00:16:39 }}999
{{#time: r | @999 }}Thu, 01 Jan 1970 00:16:39 +0000 (правильний результат)
{{#time: r | 999 }}Error: Invalid time. (непідтримуваний формат року)
{{#time: r | 1970-01-01 00:16:40 }}Thu, 01 Jan 1970 00:16:40 +0000
{{#time: U | 1970-01-01 00:16:40 }}1000
{{#time: r | @1000 }}Thu, 01 Jan 1970 00:16:40 +0000 (правильний результат)
{{#time: r | 1000 }}Thu, 23 Jan 1000 00:00:00 +0000 (трактується як рік з поточними місяцем та числом)
{{#time: r | 1970-01-01 02:46:39 }}Thu, 01 Jan 1970 02:46:39 +0000
{{#time: U | 1970-01-01 02:46:39 }}9999
{{#time: r | @9999 }}Thu, 01 Jan 1970 02:46:39 +0000 (правильний результат)
{{#time: r | 9999 }}Sat, 23 Jan 9999 00:00:00 +0000 (трактується як рік з поточними місяцем та числом)
{{#time: r | 1970-01-01 02:46:40 }}Thu, 01 Jan 1970 02:46:40 +0000
{{#time: U | 1970-01-01 02:46:40 }}10000
{{#time: r | @10000 }}Thu, 01 Jan 1970 02:46:40 +0000 (правильний результат)
{{#time: r | 10000 }}Error: Invalid time. (непідтримуваний формат року)
Увага Увага: Допустимим є час в проміжку від 1 січня 0111 до 31 грудня 9999. Для років від 100 до 100 не завжди правильний, так само як і для Y та високосних років. Коди r, D, l та U трактують ці роки як 2000-2010.

{{#time: d F Y | 29 Feb 0100 }}01 березень 0100
(правильний результат, не високосний рік), але
{{#time: r | 29 Feb 0100 }}Mon, 01 Mar 0100 00:00:00 +0000 (неправильний результат, навіть якщо 100 трактується як 2000, оскільки це високосний рік)
{{#time: d F Y | 15 April 10000 }}Error: Invalid time.
{{#time: r | 10000-4-15 }}Sat, 15 Apr 2000 10:00:00 +0000

Роки з однозначним чи двозначним числовим записом, тобто 0-99, трактуються як 2000-2069 та 1970-1999, окрім випадку коли вони записані як чотиризначні числа що починаються з нулів:
{{#time: d F Y | 1 Jan 6 }}01 січень 2006
{{#time: d F Y | 1 Jan 06 }}01 січень 2006
{{#time: d F Y | 1 Jan 006 }}01 січень 2006
{{#time: d F Y | 1 Jan 0006 }}01 січень 0006 (4-digit format)

День тижня підтримується тільки для років 100-110 та для років починаючи із 1753. Для років 111-1752 код "r" повертає "Unknown", а код "l" повертає "<>". В наслідок цього, результат повернений кодом "r" для цих років, не приймається як вхідні дані.

Дати можна вказувати не тільки повністю, але і частково; функція доповнить частини дати яких не вистачає, використовуючи значення для поточного моменту:

{{#time: Y | January 1 }}2019
Увага Увага: Доповнення частин дати доповнює не всі частини дати; деякі частини доповнюються значеннями для поточного моменту, деякі ні:

{{#time: Y m d H:i:s | June }}2019 06 23 00:00:00 Повертає початковий час дня, але поточні день та рік.

{{#time: Y m d H:i:s | 2003 }}2003 01 23 00:00:00 Повертає початковий час дня, але поточні день та місяць.

Чотиризначне число завжди трактується як рік, і ніколи як години та хвилини:[1]

{{#time: Y m d H:i:s | 1959 }}1959 01 23 00:00:00

Шестизначне число трактується як години, хвилини та секунди, якщо це можливо, інакше як помилка (не як рік та місяць):

{{#time: Y m d H:i:s | 195909 }}2019 01 23 19:59:09 Введене значення трактується як час, а не рік і місяць.
{{#time: Y m d H:i:s | 196009 }}Error: Invalid time. Попри те що 19:60:09 не є коректним часом, 196009 не трактується як вересень 1960 року.

Функція може здійснювати деякі перетворення дати:

{{#time: d F Y | January 0 2008 }}31 грудень 2007
{{#time: d F | January 32 }}Error: Invalid time.
{{#time: d F | February 29 2008 }}29 лютий
{{#time: d F | February 29 2007 }}01 березень
{{#time:Y-F|now -1 months}}2018-грудень

Довжина вхідних даних для функції #time має обмеження в 6000 символів[2].

Проблема із часовими поясами

Існує недолік в роботі функції #time (а саме у класі "DateTime" мови PHP, який використовується цією функцією) який не дозволяє нецілі значення в якості зміщення в годинах для часових поясів. Це не стосується випадків для часових поясів із зміщенням у цілу кількість годин, таких як EDT. Наприклад:

  • {{#time:g:i A | -4 hours }} ==> 10:51 PM

Але, Венесуела відрізняється від UTC на -4.5 години, і тому час у її часовому поясі не буде підрахований правильно. Ось що станеться:

  • {{#time:g:i A | -4.5 hours }} ==> 11:51 AM

Щоб уникнути цієї проблеми, просто вкажіть зміщення часу у хвилинах чи секундах, наприклад:

  • {{#time:g:i A | -270 minutes }} ==> 10:21 PM
  • {{#time:g:i A | -16200 seconds }} ==> 10:21 PM

(Тім Старлінг, розробник цієї функції, запропонував синтаксис для вирішення цієї проблеми.)

#timel

Ця функція є ідентичною до {{#time: ... }}, окрім того що вона використовує місцевий час для поточної вікі (який налаштований в $wgLocaltimezone), якщо час не вказано.

{{#time: Y-m-d }}2019-01-23
{{#timel: Y-m-d }}2019-01-23
{{#time: Y F d H:i:s}}2019 січень 23 02:51:22
{{#timel: Y F d H:i:s}}2019 січень 23 02:51:22
Приклад попередження з https://no.wikipedia.org/wiki/Maldiskusjon:Sommertid
Увага Увага: Пам'ятайте, що код U як в #time, так в #timel, поверне однакову кількість секунд що пройшли з моменту 00:00:00 1 січня 1970 року за UTC навіть у вікі з часовим поясом що відрізняється від UTC (раніше відомий як GMT)
U Час Unix. Кількість секунд що пройшли з моменту 00:00:00 1 січня 1970 року за GMT.
Z Зміщення часового поясу в секундах.
{{#time: U}}1548211882
{{#timel: U}}1548211882
{{#time: Z}}0
{{#timel: Z}}0

#titleparts

Ця функція поділяє назву сторінки на сегменти, що розділені символами косої риски. Після цього деякі із цих сегментів повертаються в якості результату.

{{#titleparts: назва сторінки | кількість сегментів, що треба повернути | сегмент з якого почати }}

Якщо кількість сегментів, що треба повернути не вказано, то вона отримує значення за замовчуванням "0", яке повертає всі сегменти від сегмент з якого почати до кінця. Якщо не вказано сегмент з якого почати або для нього вказане значення "0", то аргумент отримує значення за замовчуванням "1":

{{#titleparts: Talk:Foo/bar/baz/quok }}Talk:Foo/bar/baz/quok
{{#titleparts: Talk:Foo/bar/baz/quok | 1 }}Talk:Foo See also {{ROOTPAGENAME }}.
{{#titleparts: Talk:Foo/bar/baz/quok | 2 }}Talk:Foo/bar
{{#titleparts: Talk:Foo/bar/baz/quok | 2 | 2 }}bar/baz
{{#titleparts: Talk:Foo/bar/baz/quok | | 2 }}bar/baz/quok
{{#titleparts: Talk:Foo/bar/baz/quok | | 5 }}

Від'ємні значення допускаються в обох аргументах. Якщо від'ємне значення вказане для кількість сегментів, що треба повернути, то функція відрізує вказану кількість сегментів від кінця. При від'ємному значенні для сегмент з якого почати, сегменти рахуються з кінця:

{{#titleparts: Talk:Foo/bar/baz/quok | -1 }}Talk:Foo/bar/baz Відрізує один сегмент від кінця текстового рядка. Див. також{{BASEPAGENAME}}.
{{#titleparts: Talk:Foo/bar/baz/quok | -4 }} Відрізує всі 4 сегменти від кінця рядка
{{#titleparts: Talk:Foo/bar/baz/quok | -5 }} Відрізує 5 сегментів від кінця рядка (що більше ніж існує)
{{#titleparts: Talk:Foo/bar/baz/quok | | -1 }} quok Повертає останній сегмент. Див. також {{SUBPAGENAME}}.
{{#titleparts: Talk:Foo/bar/baz/quok | -1 | 2 }} bar/baz Відрізує один сегмент від кінця рядка, після чого повертає другий сегмент і все після нього, що залишилось
{{#titleparts: Talk:Foo/bar/baz/quok | -1 | -2 }} baz Бере другий сегмент і все після нього, після чого відрізує один сегмент від кінця

Before processing, the pagename parameter is HTML-decoded: if it contains some standard HTML character entities, they will be converted to plain characters (internally encoded with UTF-8, i.e. the same encoding as in the MediaWiki source page using this parser function).

For example, any occurence of &quot;, &#34;, or &#x22; in pagename will be replaced by ".
No other conversion from HTML to plain text is performed, so HTML tags are left intact at this initial step even if they are invalid in page titles.
Some magic keywords or parser functions of MediaWiki (such as {{PAGENAME }} and similar) are known to return strings that are needlessly HTML-encoded, even if their own input parameter was not HTML-encoded:

The titleparts parser function can then be used as a workaround, to convert these returned strings so that they can be processed correctly by some other parser functions also taking a page name in parameter (such as {{PAGESINCAT: }} but which are still not working properly with HTML-encoded input strings.

For example, if the current page is Category:Côte-d'Or, then:

  • {{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }}, and {{#ifeq: {{FULLPAGENAME}} | Category:Côte-d&apos;Or | 1 | 0 }} are both returning 1; (the #ifeq parser function does perform the HTML-decoding of its input parameters).
  • {{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }}, and {{#switch: {{FULLPAGENAME}} | Category:Côte-d&apos;Or = 1 | #default = 0 }} are both returning 1; (the #switch parser function does perform the HTML-decoding of its input parameters).
  • {{#ifexist: {{FULLPAGENAME}} | 1 | 0 }}, {{#ifexist: Category:Côte-d'Or | 1 | 0 }}, or even {{#ifexist: Category:Côte-d&apos;Or | 1 | 0 }} will all return 1 if that category page exists (the #ifexist parser function does perform the HTML-decoding of its input parameters);
  • {{PAGESINCAT: Côte-d'Or }} will return a non-zero number, if that category contains pages or subcategories, but:
  • {{PAGESINCAT: {{CURRENTPAGENAME}} }}, may still unconditionally return 0, just like:
  • {{PAGESINCAT: {{PAGENAME|Category:Côte-d'Or}} }}
  • {{PAGESINCAT: {{PAGENAME|Category:Côte-d&apos;Or}} }}

The reason of this unexpected behavior is that, with the current versions of MediaWiki, there are two caveats:

  • {{FULLPAGENAME}}, or even {{FULLPAGENAME|Côte-d'Or}} may return the actually HTML-encoded string Category:Côte-d&apos;Or and not the expected Category:Côte-d'Or, and that:
  • {{PAGESINCAT: Côte-d&apos;Or }} unconditionally returns 0 (the PAGESINCAT magic keyword does not perform any HTML-decoding of its input parameter).

The simple workaround using titleparts (which will continue to work if the two caveats are fixed in a later version of MediaWiki) is:

  • {{PAGESINCAT: {{#titleparts: {{CURRENTPAGENAME}} }} }}
  • {{PAGESINCAT: {{#titleparts: {{PAGENAME|Category:Côte-d'Or}} }} }}
  • {{PAGESINCAT: {{#titleparts: {{PAGENAME|Category:Côte-d&apos;Or}} }} }}, that all return the actual number of pages in the same category.

Then the decoded pagename is canonicalized into a standard page title supported by MediaWiki, as much as possible:

  1. All underscores are automatically replaced with spaces:
    {{#titleparts: Talk:Foo/bah_boo|1|2}}bah boo Not bah_boo, despite the underscore in the original.
  2. The string is split a maximum of 25 times; further slashes are ignored and the 25th element will contain the rest of the string. The string is also limited to 255 characters, as it is treated as a page title:
    {{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee | 1 | 25 }}y/z/aa/bb/cc/dd/ee
    If for whatever reason you needed to push this function to its limit, although very unlikely, it is possible to bypass the 25 split limit by nesting function calls:
    {{#titleparts: {{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee| 1 | 25 }} | 1 | 2}}z
  3. Finally the first substring is capitalized according to the capitalization settings of the local wiki (if that substring also starts by a local namespace name, that namespace name is also normalized).
    {{#titleparts: talk:a/b/c }}Talk:A/b/c
Увага Увага: You can use #titleparts as a small "string parser and converter", but consider that it returns the first substring capitalized:
{{#titleparts: one/two/three/four|1|1 }}One
{{#titleparts: one/two/three/four|1|2 }}two

If lower case is needed, use lc: function to control output:

{{lc: {{#titleparts: one/two/three/four|1|1 }} }}one

You can prepend a 'dummy' slash at the beginning of the string to get the correct first substring capitalization (uppercase or lowercase). Use 2 instead of 1 for first segment to return:

{{#titleparts: /one/two/three/four|1|2 }}one
{{#titleparts: /One/two/three/four|1|2 }}One
Увага Увага: Certain characters that are illegal in a page title will cause #titleparts to not parse the string:
{{#titleparts: {one/two} | 1 | 1 }}{one/two}. Does not produce the expected: {one
{{#titleparts: [[page]]/123 | 1 | 2 }}page/123. Does not work because brackets are illegal in page titles and this parser function does not process links embedded in its input pagename parameter, even when they use the MediaWiki syntax, or any other HTML or MediaWiki tags.
{{#titleparts: red/#00FF00/blue | 1 | 3 }} → "". Does not work because "#" is also illegal in page titles.
Увага Увага: If any part of the title is just "." or "..", #titleparts will not parse the string:
{{#titleparts: one/./three | 1 | 1 }}one/./three. The whole string is returned. It does not produce the expected: one
Увага Увага: This function does not degrade gracefully if the input exceeds 255 characters. If the input string is 256 characters long or more, the whole string is returned.


Загальні поради

Підстановка

Функції парсера можуть бути підставлені. Для цього вкажіть префікс subst: перед знаком решітки у виклику функції:

{{subst:#ifexist: Help:Extension:ParserFunctions/uk | [[Help:Extension:ParserFunctions/uk]] | Help:Extension:ParserFunctions/uk }} → код [[Help:Extension:ParserFunctions/uk]] буде вставлений до вікітексту оскільки сторінка Help:Extension:ParserFunctions/uk існує.
Увага Увага: The results of substituted parser functions are undefined if the expressions contain unsubstituted volatile code such as variables or other parser functions. For consistent results, all the volatile code in the expression to be evaluated must be substituted. See Help:Substitution.

Substitution does not work within <ref></ref> , you can use {{subst:#tag:ref|}} for this purpose.

Перенаправлення

Підстановка поточного часу за допомогою {{#time:…|now-…}}, хоч і може використовуватись в посиланнях, але не працює в перенаправленнях.

Вставка символів вертикальної риски до таблиць

Parser functions will mangle wikitable syntax and pipe characters (|), treating all the raw pipe characters as parameter dividers. To avoid this, most wikis used a template Template:! with its contents only a raw pipe character (|), since MW 1.24 a {{!}} magic word replaced this kludge. This 'hides' the pipe from the MediaWiki parser, ensuring that it is not considered until after all the templates and variables on a page have been expanded. It will then be interpreted as a table row or column separator. Alternatively, raw HTML table syntax can be used, although this is less intuitive and more error-prone.

You can also escape the pipe character for display as a plain, uninterpreted character using an HTML entity: &#124; .

Опис Ви пишете Ви отримуєте
Escaping pipe character as table row/column separator
{{!}}
|
Escaping pipe character as a plain character
&#124;
|


Прибирання пробільних символів

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

{{#ifeq: foo           |           foo | equal | not equal }}equal
{{#ifeq: "foo          " | "          foo" | equal | not equal }}not equal

Щоб уникнути прибирання пробільних символів в аргументах функції #if можна скористатися шаблоном m:Template:If або використати <nowiki> </nowiki> замість пробілів.

foo{{#if:|| bar }}foofoobarfoo
foo{{#if:||<nowiki /> bar <nowiki />}}foofoo bar foo

However, this method can be used to render a single whitespace character only, since the parser squeezes multiple whitespace characters in a row into one.

<span style="white-space: pre;">foo{{#if:||<nowiki></nowiki>      bar      <nowiki></nowiki>}}foo</span>
foo bar foo

In this example, the white-space: pre style is used to force the whitespace to be preserved by the browser, but even with it the spaces are not shown. This happens because the spaces are stripped by the software, before being sent to the browser.

It is possible to workaround this behavior replacing whitespaces with &#32; (breakable space) or &nbsp; (non-breakable space), since they are not modified by the software:

<span style="white-space: pre;">foo{{#if:||&#32;&#32;&#32;bar&#32;&#32;&#32;}}foo</span>foo bar foo
foo{{#if:||&nbsp;&nbsp;&nbsp;bar&nbsp;&nbsp;&nbsp;}}foofoo   bar   foo


Див. також

Примітки

  1. До випуску версії r86805 в 2011 році, це не завжди було так.
  2. ExtParserFunctions.php на phabricator.wikimedia.org