Довідка:Розширення:ParserFunctions
Розширення ParserFunctions впроваджує одинадцять додаткових функцій парсера на додачу до «магічних слів », які вже присутні у MediaWiki. (Можна налаштувати конфігурацію для впровадження інших функцій парсера для обробки текстових рядків; ці функції для рядків задокументовані в іншому місці .) Всі парсерні функції впроваджені цим розширенням мають таку форму:
{{#ім'я_функції: аргумент 1 | аргумент 2 | аргумент 3 … }}
![]() |
Зверніть увагу! Коли Ви редагуєте цю сторінку, то погоджуєтесь робити свій внесок під ліцензією CC0. Детальніше про умови ліцензії можна дізнатися на сторінці довідки. | ![]() |
#expr
Тип | Оператори |
---|---|
Групування (круглі дужки) | ( )
|
Числа | 1234.5 e (2.718) pi (3.142)
|
бінарний оператор e унарний + ,-
| |
Унарні | not ceil trunc floor abs exp ln sin cos tan acos asin atan sqrt
|
Бінарні | ^
|
* / div mod fmod
| |
+ -
| |
Округлення | round
|
Логічні | = != <> > < >= <=
|
and
| |
or
|
Ця функція обчислює математичний вираз і повертає обчислене значення.
Ця функція також доступна в Scribunto під назвою mw.ext.ParserFunctions.expr
.
{{#expr: вираз }}
Basic example
{{#expr: 1 + 1 }}
→ 2
Всі доступні оператори перелічені в таблиці справа, в порядку пріоритету. Дивитися [[Manual:Expr parser function syntax |Help:Calculation]] для детальнішої інформації про роботу кожного з операторів. Точність та формат поверненого результуючого значення відрізняються в залежності від операційної системи сервера, на якому встановлена вікі, та від формату чисел загальноприйнятого для мови сайту. The accuracy and format of the result returned will vary depending on the operating system of the server running the wiki and the number format of the site language.
У виразах, що використовують булеву алгебру, нуль приймає значення 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}} повертає значення 17 986 235, при тому що потрібним значенням є 17986235, яке можна отримати за допомогою {{formatnum :{{NUMBEROFUSERS}}|R}}
.
Це особливо важливо для деяких мов, де числа записуються не арабськими цифрами.
Наприклад, для бенгальської мови {{NUMBEROFUSERS}} поверне ৩০,০৬১.
{{#expr:{{NUMBEROFUSERS}}+100}}
→ Expression error: Unrecognized punctuation character " ".{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}
→ 17986335
Округлення
Оператор округлення округляє число зліва від нього до 1/10 в степені числа справа (в якому дробова частина відкидається).
Для округлення до більшого чи меншого цілого значення використовуються унарні оператори ceil
та floor
відповідно.
Вираз | Результат | Метод округлення |
---|---|---|
{{#expr: 1/3 round 5 }} |
0.33333 | Остання цифра (3) є меншою за 5, тому округлення не відбувається (0.333333… → 0.33333) |
{{#expr: 1/6 round 5 }} |
0.16667 | Остання цифра (6) є більшою за 5, тому округлення відбувається (0.166666… → 0.16667) |
{{#expr: 8.99999/9 round 5 }} |
1 | І знову, результат округляється відповідно до останньої цифри і це призводить до додаткового округлення (0.999998… → 1.00000 → 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 вже і так ціле число |
Rounding large numbers | ||
{{#expr: 1e-92 round 400 }} |
1.0E-92 | Rounding to a very large number leads to infinity. Hence, the original value without the infinity is given as the answer. |
{{#expr: 1e108 round 200 }} |
1.0E+108 | Same as above. |
Текстові рядки
Математичні вирази можуть містити лише числа, вони не можуть порівнювати текстові рядки або символи. Для цього слід використовувати функцію #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
Тестовий рядок завжди інтерпретується як текстовий, математичні вирази не вираховуються (див. #ifexpr):
{{#if: 1==2 | yes | no }}
→ yes{{#if: 0 | yes | no }}
→ yes
Останній аргумент може бути відсутнім:
{{#if: foo | yes }}
→ yes{{#if: | yes }}
→{{#if: foo | | no}}
→
Функція може бути вкладеною. Для цього внутрішня функція #if у повній формі розміщується на місці параметра охоплюючої функції #if. Допускається не більше семи рівнів вкладеності, хоча це може залежати від вікі або обмеження пам'яті.
{{#if:тестовий рядок
|значення, якщо тестовий рядок не порожній
|{{#if:test string
|value if test string is not empty
|значення, якщо тестовий рядок порожній (або містить тільки пробільні символи)
}}
}}
value if test string is not empty
Також, можна використовувати параметр в якості тестового рядку у функції #if
. Необхідно переконатися, що ви додано символ |
(вертикальна риска) після імені змінної.
(так що, якщо параметр не має значення, то він оцінюється в порожній рядок замість рядка «{{{1}}}
»)
{{#if:{{{1|}}}|Ви ввели текст у змінній 1|Тексту у змінній 1 немає}}
Див. Довідка:Функції парсера в шаблонах для інших прикладів використання цієї функції парсера.
#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
#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
Some errors may cause a tracking category to be added, using {{#iferror:}}
will not suppress the addition of the category.
#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 }}
→
Boolean operators of equality or inequality operators are supported.
{{#ifexpr: 0 = 0 or 1 = 0 | yes}}
→ yes{{#ifexpr: 0 = 0 and 1 = 0 | | no}}
→ no{{#ifexpr: 2 > 0 or 1 < 0 | yes}}
→ yes{{#ifexpr: 2 > 0 and 1 > 0 | yes | no}}
→ yes
#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:
вважається «ресурсомісткою функцією парсера», тому кількість викликів цієї функції з однієї сторінки є обмеженою (включаючи виклики зроблені в шаблонах, що включаються до сторінки).
When this limit is exceeded, any further #ifexist:
functions automatically return false, whether the target page exists or not, and the page is categorized into Category:Pages with too many expensive parser function calls.
Також, сторінки із таким перевищенням обмеження додаються до категорії спостереження $category, чия назва може відрізнятися залежно від мови вікі.
Для деяких випадків можливо імітувати функцію «ifexist» за допомогою CSS, використовуючи селектори a.new
(щоб вибрати посилання на неіснуючі статті) або a:not(.new)
(щоб вибрати посилання на існуючі статті).
Крім того, оскільки максимальна кількість викликів ресурсомістких функцій на одній сторінці вказана в $wgExpensiveParserFunctionLimit
, то можна показати більшу кількість у файлі LocalSettings.php за потреби.
ifexist і бажані сторінки
Сторінку, яка не існує та випробовується для використання #ifexist, буде додано до Бажані сторінки. Див. завдання T14019 щодо причини цього й w:Template:Linkless exists за обхідним шляхом.
#rel2abs
Ця функція перетворює відносний шлях до файла на абсолютний.
{{#rel2abs: path }}
{{#rel2abs: path | base path }}
В аргументі path
дійсним є наступний синтаксис:
.
→ поточний рівень..
→ піднятися на один рівень/foo
→ опуститися на один рівень у підкаталог /foo
Якщо base path
не задано, замість нього буде використана повна назва поточної сторінки:
{{#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).
For a similar group of functions see also Help:Magic words#URL data. Built-in parser functions include: 'localurl:', 'fullurl:', 'anchorencode:' etc.
#switch
Див. також: w:Help:Switch parser function
Ця функція порівнює вхідний аргумент із декількома текстовими рядками, і якщо збіг знайдено, повертає значення поставлене у відповідність до знайденого рядка.
{{#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 }}
→{{#switch: test | test = Foo | baz = Baz | B=ar }}
→ Foo
Або можна прямо вказати результат за замовчуванням вказавши «#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
.
«#default =
» в останньому параметрі може бути опущений у вищенаведеному випадку.
Використання з параметрами
Функція може бути використана з параметрами як тестовий рядок.
У цьому випадку необов'язково розміщувати вертикальну риску після імені параметру, оскільки дуже малоймовірно, що ви виберете встановити випадок із рядком «{{{parameter name}}}
».
(Це значення, яке параметр матиме за замовчуванням, якщо вертикальна риска відсутня, а параметр не існує чи має значення.
Див. Довідка:Функції парсера в шаблонах .)
{{#switch: {{{1}}} | foo = Foo | baz = Baz | Bar }}
У вищенаведеному випадку якщо {{{1}}}
дорівнює foo
, то функція поверне Foo
.
Якщо ж дорівнює baz
, то функція поверне Baz
.
Якщо параметр порожній або не існує, то функція поверне Bar
.
Як у розділі вище, випадки можуть поєднуватися й давати єдиний результат.
{{#switch: {{{1}}} | foo | zoo | roo = Foo | baz = Baz | Bar }}
Тут, якщо {{{1}}}
дорівнює foo
, zoo
чи roo
, то функція поверне Foo
.
Якщо ж дорівнює baz
, то функція поверне Baz
.
Якщо параметр порожній або не існує, то функція поверне Bar
.
На додачу, результат за замовчуванням може бути опущений, якщо ви не бажаєте нічого повертати, якщо значення тестового параметру не відповідає жодному випадку.
{{#switch: {{{1}}} | foo = Foo | bar = Bar }}
У цьому випадку функція повертає порожній рядок, якщо {{{1}}}
не існує чи не дорівнює foo
або bar
, у цьому випадку вона повертає Foo
або Bar
.
Це має той самий ефект, що й оголошення порожнім результату за замовчуванням.
{{#switch: {{{1}}} | foo | zoo | roo = Foo | baz = Baz | }}
Якщо з деяких причин ви вирішили встановити випадок як «{{{parameter name}}}
», то функція поверне результат такого випадку, коли параметр не існує чи не має значення.
Параметр повинен існувати та мати будь-яке значення, крім рядка «{{{parameter name}}}
» для повернення результату функції за замовчуванням.
- (якщо
{{{1}}}
не існує чи порожнє){{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }}
→ Foo
- (якщо
{{{1}}}
має значення «test
»):{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }}
→ Bar
- (якщо
{{{1}}}
має значення «{{{1}}}
»):{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }}
→ Foo
В такому гіпотетичному випадку слід додати до параметра вертикальну риску ({{{1|}}}
).
Нюанси порівняння
Так само як і в #ifeq
, якщо рядок для порівнянна та випадок є числами, вони порівнюються як числа. В іншому випадку вони вважаються текстовими рядками чутливими до реєстру:
{{#switch: 0 + 1 | 1 = one | 2 = two | three}}
→ three{{#switch: {{#expr: 0 + 1}} | 1 = one | 2 = two | three}}
→ one{{#switch: 02 | +1 = one | +2 = two | three}}
→ two{{#switch: 100 | 1e1 = ten | 1e2 = hundred | other}}
→ hundred
{{#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
Буквальне включення знаку рівності
Текстові рядки випадків не можуть містити знаків рівності. Щоб обійти це обмеження, використайте магічне слово {{=}} або замість символу рівності вставте його HTML-код =
.
Приклад:
Ваш тип | Ви отримуєте |
---|---|
{{#switch: 1=2
| 1=2 = raw
| 1<nowiki>=</nowiki>2 = nowiki
| 1{{=}}2 = template
| default
}}
|
template |
{{#switch: 1=2
| 1=2 = html
| default
}}
|
html |
Заміна #ifeq
Функція #switch
може використовуватись для зниження рівня вкладеності.
Наприклад:
{{#switch:{{{1}}} |condition1=branch1 |condition2=branch2 |condition3=branch3 |branch4}}
є еквівалентними до
{{#ifeq:{{{1}}}|condition1 |branch1 |{{#ifeq:{{{1}}}|condition2 |branch2 |{{#ifeq:{{{1}}}|condition3 |branch3 |branch4}}}}}}
тобто глибокого вкладення, лінійного:
{{#ifeq:{{{1}}}|condition1
|<!--then-->branch1
|<!--else-->{{#ifeq:{{{1}}}|condition2
|<!--then-->branch2
|<!--else-->{{#ifeq:{{{1}}}|condition3
|<!--then-->branch3
|<!--else-->branch4}}}}}}
З іншого боку, заміна switch може бути складною чи непрактичною для IF, вкладених в обидві гілки (показано з альтернативами відступів з обох боків), утворюючи повне симетричне дерево:
{{#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
}}
}}
}}
#tag
Within spaces, tabs, and new lines, using the #tag:poem
parser function, the formatting of your text is preserved with specific rules:
- Single New Line: A single new line in your text will be preserved exactly as written, keeping line breaks intact.
- Spaces and Tabs: Tabs or extra spaces at the start of a line or between words will be rendered as a single space.
For example:
Wikitext:
{{#tag:poem|abc [[Sandbox|abc]] abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc
def def def {{tc}} def def def def def def def def def def def def def def def def def def def def def def
ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi}}
Rendering:
abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc
def def def in def def def def def def def def def def def def def def def def def def def def def def
ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi ghi
In the example above, a tab after the first word "abc" and the new line after the last word "abc" are both rendered as a space.
By following these guidelines around spaces, tabs, and single new lines, you can control how your text appears when rendered with the #tag:poem
function.
#time
Код | Опис | Результат для поточного моменту (Очистіть кеш цієї сторінки для оновлення результатів) |
---|---|---|
Рік | ||
Y
|
Рік в чотирьох цифрах. | 2024 |
y
|
Останні дві цифри року. | 24 |
L
|
1 якщо рік високосний, 0 якщо ні. | 1 |
o [note 1]
|
Рік вказаного тижня відповідно до ISO-8601.[note 2] | 2024[note 3] |
Місяць | ||
n
|
Номер місяця без додавання нуля спереду. | 9 |
m
|
Номер місяця із додаванням нуля спереду за потреби. | 09 |
M
|
Скорочена назва місяця мовою сайту. | вер |
F
|
Повна назва місяця мовою сайту. | вересень |
xg
|
Виводить повну назву місяця в родовому відмінку мовою сайту, для розділення родового та називного відмінку. Така можливість є корисною для багатьох слов'янських мов, наприклад польської, російської, білоруської, чеської, словацької, словенської, української тощо. | Для польської мови:{{#time:F Y|June 2010|pl}} → czerwiec 2010(називний відмінок) {{#time:d xg Y|20 June 2010|pl}} → 20 czerwca 2010(родовий відмінок) |
День місяця або року | ||
j
|
День місяця без додавання нуля спереду. | 1 |
d
|
День місяця із додаванням нуля спереду за потреби. | 01 |
z
|
День року (1 січня = 0). Примітка: Щоб отримати день року за ISO, додайте 1. |
244 |
Тиждень та день тижня | ||
W
|
Номер тижня за ISO 8601 із додаванням нуля спереду за потреби. | 35 |
N
|
Номер дня тижня за ISO 8601 (понеділок = 1, неділя = 7). | 7 |
w
|
Номер дня тижня (неділя = 0, субота = 6). | 0 |
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
|
Хвилини із додаванням нуля спереду за потреби. | 30 |
s
|
Секунди із додаванням нуля спереду за потреби. | 04 |
U
|
Час Unix. Кількість секунд що пройшли із 1 січня 1970 року, 00:00:00 GMT. | 1725157804 |
Часовий пояс (відповідно до 1.22wmf2) | ||
e
|
Ідентифікатор часового поясу. | UTC |
I
|
Чи належить дата до періоду літнього часу. | 0 |
O
|
Різниця із часом за Гринвічем (GMT) | +0000 |
P
|
Різниця із часом за Гринвічем (GMT) з двокрапкою | +00:00 |
T
|
Абревіатура часового поясу. | UTC |
Z
|
Різниця часових поясів у секундах. | 0 |
Різне | ||
t
|
Кількість днів у поточному місяці. | 30 |
c
|
Дата форматована за ISO 8601, еквівалентна до Y-m-d"T"H:i:s+00:00 .
|
2024-09-01T02:30:04+00:00 |
r
|
Дата форматована за RFC 5322, еквівалентна до D, j M Y H:i:s +0000 , де назва дня тижня та назва місяця тільки англійською.
|
Sun, 01 Sep 2024 02:30:04 +0000 |
Негрегоріанські календарі | ||
Мусульманський | ||
xmj
|
День місяця. | 26 |
xmF
|
Повна назва місяця. | сафара |
xmn
|
Номер місяця. | 2 |
xmY
|
Рік повністю. | 1446 |
Іранський | ||
xit
|
Кількість днів у поточному місяці. | 31 |
xiz
|
День року. | 165 |
xij
|
День місяця. | 11 |
xiF
|
Повна назва місяця. | шахривара |
xin
|
Номер місяця. | 6 |
xiY
|
Рік повністю. | 1403 |
xiy
|
Останні дві цифри року. | 03 |
Єврейський | ||
xjj
|
День місяця. | 28 |
xjF
|
Повна назва місяця. | Ав |
xjt
|
Кількість днів у поточному місяці. | 30 |
xjx
|
Назва місяця в родовому відмінку. | Ава |
xjn
|
Номер місяця. | 11 |
xjY
|
Рік повністю. | 5784 |
Тайський сонячний | ||
xkY
|
Повний рік у тайському сонячному календарі. Примітка: Для років до 1941 дати у проміжку з січня до березня не обчислюються належним чином. |
2567 |
Міньго/Чучхе | ||
xoY
|
Рік повністю. | 113 |
Японське ненґо | ||
xtY
|
Рік повністю. | 令和6 |
Прапори | ||
xn
|
Форматувати наступний числовий код як число в ASCII. | В мові гінді, {{#time:H, xnH}} повертає ०६, 06.
|
xN
|
Те саме що і xn , але як переключений прапор, який діє аж до кінця рядка або до наступної появи xN в текстовому рядку.
| |
xr
|
Форматує наступне число у вигляді числа із римськими цифрами. Працює тільки для чисел що не перевищують 10 000 (3 000 в MediaWiki до версії 1.20). |
{{#time:xrY}} → MMXXIV
|
xh
|
Форматує наступне число у вигляді числа із єврейськими цифрами. | {{#time:xhY}} → ב'כ"ד
|
Ця функція парсера приймає дату та/або час (за Грегоріанським календарем) і форматує їх відповідно до заданого синтаксису. Можна задати об'єкт дати/часу; за замовчуванням береться значення магічного слова {{CURRENTTIMESTAMP}}
, яке містить час коли поточна сторінка в останнє трансформувалась в HTML.
{{#time: format string }}
{{#time: format string | date/time object }}
{{#time: format string | date/time object | language code }}
{{#time: format string | date/time object | language code | local }}
Список допустимих кодів форматування наведено в таблиці справа. Будь-який символ в текстовому рядку для форматування, який не розпізнано, включається до результату без змін; це стосується також і пробілів (для інтерпритації коду системі вони не потрібні). If no character is recognized in the formatting string, and the date/time object is without error, then the formatting string is returned as output. Існує два способи уникнення трактування символу як коду форматування:
- Обернена коса риска після якої йде символ, трактується як просто цей символ;
- Символи всередині подвійних лапок так і залишаються символами, а лапки відкидаються.
До того ж, подвійний символ xx
трактується як один символ «x».
Оскільки список кодів форматування продовжує розвиватися (з підтримкою нових календарів або нових полів дати, обчислених і відформатованих по-іншому), ви повинні екранувати всі літерні символи (а не лише літери ASCII, які зараз використовуються в кодах форматування), які потрібно передати через незмінне.
На жаль, наразі одинарні лапки ASCII все ще не розпізнаються як проста альтернатива для позначення буквального тексту до підтримуваних на даний момент подвійних лапок ASCII (наприклад, подвійні лапки є обов’язковими для інших видів використання, як-от розмежування значень рядка в JSON, C , C++…) і зворотні косі риски (які також потрібно екранувати в рядкових константах, які використовуються багатьма мовами, включаючи JSON, C, C++, PHP, JavaScript, Lua). Таким чином, ви все одно не можете вставити будь-які буквальні подвійні лапки, не екрануючи їх за допомогою зворотної косої риски (або замість них ви можете використовувати інші фігурні, кутові чи квадратні лапки).
{{#time: Y-m-d }}
→ 2024-09-01{{#time: [[Y]] m d }}
→ 2024 09 01{{#time: [[Y (year)]] }}
→ 2024 (24UTCamSun, 01 Sep 2024 02:30:04 +0000){{#time: [[Y "(year)"]] }}
→ 2024 (year){{#time: i's" }}
→ 30'04"
Об'єкт дати/часу
можна задавати в будь-якому форматі який допускається у функції strtotime() мови PHP.
Absolute (e.g. 20 December 2000
), relative (e.g. +20 hours
), and combined times (e.g. 30 July +1 year
) are accepted.
{{#time: r|now}}
→ Sun, 01 Sep 2024 02:30:05 +0000{{#time: r|+2 hours}}
→ Sun, 01 Sep 2024 04:30:05 +0000{{#time: r|now + 2 hours}}
→ Sun, 01 Sep 2024 04:30:05 +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
Параметр local
визначає, чи об'єкт дата/час позначає місцевий часовий пояс, чи UTC.
Це булеві параметри: їхнє значення визначається приведенням значення аргументу (докладніше про приведення рядків до булевих значень див. офіційну документацію PHP).
$wgLocaltimezone
встановлено в UTC
, то немає різниці у виведенні, коли local
встановлено у true
чи false
.Докладніше див. наступні приклади:
{{#time: Y F d H:i:s|now|it|0}}
→ 2024 settembre 01 02:30:05{{#time: Y F d H:i:s|now|it|1}}
→ 2024 settembre 01 02:30:05{{#time: Y F d H:i:s|+2 hours||0}}
→ 2024 вересень 01 04:30:05{{#time: Y F d H:i:s|+2 hours||1}}
→ 2024 вересень 01 04:30:05
{{#time:c|2019-05-16T17:05:43+02:00|it}}
→ 2019-05-16T15:05:43+00:00{{#time:c|2019-05-16T17:05:43+02:00|it|0}}
→ 2019-05-16T15:05:43+00:00{{#time:c|2019-05-16T17:05:43+02:00|it|true}}
→ 2019-05-16T15:05:43+00:00
Час Unix можна використовувати для підрахунку дати, якщо поставити перед ним символ @
.
{{#time: U | now }}
→ 1725157805{{#time: r | @1725157804 }}
→ Sun, 01 Sep 2024 02:30:04 +0000
Дати можна вказувати не тільки повністю, але і частково; функція доповнить частини дати яких не вистачає, використовуючи значення для поточного моменту:
{{#time: Y | January 1 }}
→ 2024
Чотиризначне число завжди трактується як рік, і ніколи як години та хвилини:[1]
{{#time: Y m d H:i:s | 1959 }}
→ 1959 09 01 00:00:00
Шестизначне число трактується як години, хвилини та секунди, якщо це можливо, інакше як помилка (не як рік та місяць):
{{#time: Y m d H:i:s | 195909 }}
→ 2024 09 01 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}}
→ 2024-серпень
Довжина вхідних даних для функції #time
має обмеження в 6000 символів[2].
Проблема із часовими поясами
Існує недолік в роботі функції #time (а саме у класі «DateTime» мови PHP, який використовується цією функцією) який не дозволяє нецілі значення в якості зміщення в годинах для часових поясів. Це не стосується випадків для часових поясів із зміщенням у цілу кількість годин, таких як EDT. Наприклад:
{{#time:g:i A | -4 hours }}
→ 10:30 PM
Але Індія має часовий зсув +5.5 годин від UTC, тому застосування її часового поясу не дозволить правильно обчислити відносний зсув часового поясу. Відбудеться ось що:
{{#time:g:i A | +5.5 hours }}
→ 2:30 AM
Щоб уникнути цієї проблеми, просто вкажіть зміщення часу у хвилинах чи секундах, наприклад:
{{#time:g:i A | +330 minutes }}
→ 8:00 AM{{#time:g:i A | +19800 seconds }}
→ 8:00 AM
(Тім Старлінг, розробник цієї функції, запропонував синтаксис для вирішення цієї проблеми.)
#time format like in signatures
Sometimes it is useful to construct a timestamp, which looks like the automatic timestamp generated by signatures in discussions on talk pages. On an English-language wiki, it can be created with:
{{#timel:H:i, j xg Y (e)|+330 minutes}}
→ 08:00, 1 вересня 2024 (UTC)
#timel
Ця функція є ідентичною до {{#time: ... }}
, окрім того що вона використовує місцевий час для поточної вікі (який налаштований в $wgLocaltimezone ), якщо час не вказано.
Синтаксис функції наступний:
{{#timel: format string }}
{{#timel: format string | date/time object }}
{{#timel: format string | date/time object | language code }}
$wgLocaltimezone
встановлено в UTC
, то немає різниці у виведенні, коли local
встановлено у true
чи false
.Наприклад, див. наступні приклади:
{{#time:c|now|it}}
→ 2024-09-01T02:30:05+00:00{{#time:c|now|it|0}}
→ 2024-09-01T02:30:05+00:00{{#time:c|now|it|1}}
→ 2024-09-01T02:30:05+00:00{{#timel:c|now|it}}
→ 2024-09-01T02:30:05+00:00
#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 | 3 }}
→ baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | 3 | 2 }}
→ bar/baz/quok{{#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 Бере другий сегмент і все після нього, після чого відрізує один сегмент від кінця
Перед обробкою параметр pagename є HTML-розкодованим: якщо він містить деякі стандартні сутності символів HTML, то вони перетворяться у прості символи (внутрішньо закодовані в UTF-8, тобто те саме кодування, що й на початковій сторінці MediaWiki, за допомогою цієї функції парсера).
- Наприклад, будь-яке входження
"
,"
чи"
у pagename буд замінене на"
. - Жодних інших перетворень із HTML у простий текст не здійснюється, тому теги HTML залишаються неушкодженими на цьому початковому етапі навіть, якщо вони недійсні у заголовках сторінок.
{{PAGENAME }}
і подібні), як відомо, повертають рядки, які без потреби закодовані HTML навіть, якщо їхній власний вхідний параметр не був закодований HTML.
Функція парсера titleparts потім може бути використана як обхідний шлях для перетворення цих повернених рядків так, що вони можуть бути коректно оброблені деякими іншими функціями парсера, що також приймають назву сторінки в параметрі (як-от {{PAGESINCAT: }}
), але які досі не працюють як слід із закодованими HTML вхідними рядками.
Наприклад, якщо поточна сторінка Category:Côte-d'Or, то:
{{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }}
і{{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }}
повернуть1
; (функція парсера #ifeq здійснює розкодування HTML своїх вхідних параметрів).{{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }}
і{{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }}
повернуть1
; (функція парсера #switch здійснює розкодування HTML своїх вхідних параметрів).{{#ifexist: {{FULLPAGENAME}} | 1 | 0 }}
,{{#ifexist: Category:Côte-d'Or | 1 | 0 }}
або навіть{{#ifexist: Category:Côte-d'Or | 1 | 0 }}
повернуть1
, якщо така сторінка категорії існує (функція парсера #ifexist виконує розкодування HTML своїх вхідних параметрів);{{PAGESINCAT: Côte-d'Or }}
поверне ненульове число, якщо така категорія містить сторінки чи підкатегорії, але:{{PAGESINCAT: {{CURRENTPAGENAME}} }}
все ще може безумовно повертати 0, просто як:{{PAGESINCAT: {{PAGENAME:Category:Côte-d'Or}} }}
{{PAGESINCAT: {{PAGENAME:Category:Côte-d'Or}} }}
Причиною цієї неочікуваної поведінки є те, що з поточними версіями MediaWiki є два застереження:
{{FULLPAGENAME}}
чи навіть{{FULLPAGENAME:Côte-d'Or}}
можуть повертати дійсний HTML-закодований рядокCategory:Côte-d'Or
, а не очікуванийCategory:Côte-d'Or
, і тому:{{PAGESINCAT: Côte-d'Or }}
безумовно повертає 0 (магічне слово PAGESINCAT не здійснює жодного розкодування HTML своїх вхідних параметрів).
Простим обхідним шляхом за допомогою titleparts (який продовжуватиме працювати, якщо два застереження будуть виправлені в пізніших версіях MediaWiki) є:
{{PAGESINCAT: {{#titleparts: {{CURRENTPAGENAME}} }} }}
{{PAGESINCAT: {{#titleparts: {{PAGENAME:Category:Côte-d'Or}} }} }}
{{PAGESINCAT: {{#titleparts: {{PAGENAME:Category:Côte-d'Or}} }} }}
, які повертають дійсну кількість сторінок у тій самій категорії.
Потім розкодована назва сторінки канонізується у стандартну, підтримувану MediaWiki, якомога більше:
- Всі підкреслення автоматично замінюються пробілами:
{{#titleparts: Talk:Foo/bah_boo|1|2}}
→ bah boo Не bah_boo, попри підкреслення в оригіналі.
- Рядок ділиться до 25 разів; подальші риски ігноруються, і 25-й елемент міститиме решту рядка. Рядок також обмежений 255 символами, адже він розцінюється як заголовок сторінки:
{{#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- Якщо з деяких причин вам потрібно проштовхнути цю функцію до даної межі, хоча й дуже малоймовірно, то можливо обійти обмеження 25 розділенням шляхом вкладання викликів функції:
{{#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
- Нарешті, перший підрядок починається з великої літери згідно з налаштуваннями великих літер локальної вікіпедії (якщо такий підрядок також починається з локальної назви простору назв, то назва простору назв також нормалізована).
{{#titleparts: talk:a/b/c }}
→ Talk:A/b/c
{{#titleparts: one/two/three/four|1|1 }}
→ One{{#titleparts: one/two/three/four|1|2 }}
→ two
Якщо потрібний нижній регістр, використовуйте функцію lc: для керування виведенням:
{{lc: {{#titleparts: one/two/three/four|1|1 }} }}
→ one
Ви можете додати «підставну» риску на початку рядка для отримання коректної капіталізації першого підрядка (верхній або нижній регістр). Використовуйте 2
замість 1
для «повернути перший сегмент».
{{#titleparts: /one/two/three/four|1|2 }}
→ one{{#titleparts: /One/two/three/four|1|2 }}
→ One
Рядкові функції
The ParserFunctions extension optionally defines various string functions (#len
, #pos
, #rpos
, #sub
, #count
, #replace
, #explode
, #urldecode
) if $wgPFEnableStringFunctions
is set to true
.
See here for examples.
Here is a short overview of Module:String functions:
- #len (length of string):
{{#invoke:String|len|target_string}}
- #sub (substring):
{{#invoke:String|sub|target_string|start_index|end_index}}
- #match:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
- #pos (position of target):
{{#invoke:String|pos|target_string|index_value}}
- #find:
{{#invoke:String|find|source_string|target_string|start_index|plain_flag}}
- #replace:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
- #rep (repeat):
{{#invoke:String|rep|source|count}}
- #escapePattern:
{{#invoke:String|escapePattern|pattern_string}}
- #count:
{{#invoke:String|count|source_str|pattern_string|plain_flag}}
- #join:
{{#invoke:String|join|separator|string1|string2|...}}
See also Manual:Performing string operations with parser functions for a different set of hacks used to perform string functions when these are disabled, which were used on Wikimedia wikis before the Scribunto was developed.
Загальні поради
Підстановка
Функції парсера можуть бути підставлені. Для цього вкажіть префікс subst:
перед знаком решітки у виклику функції:
{{subst:#ifexist: Help:Extension:ParserFunctions/uk | [[Help:Extension:ParserFunctions/uk]] | Help:Extension:ParserFunctions/uk }}
→ код[[Help:Extension:ParserFunctions/uk]]
буде вставлений до вікітексту оскільки сторінка Help:Extension:ParserFunctions/uk існує.
Підстановка не працює в <ref>
…</ref>
; ви можете використати {{subst:#tag:ref|
…}}
з цією метою.
Перенаправлення
Підстановка поточного часу за допомогою {{#time:
…|now-
…}}, хоч і може використовуватись в посиланнях, але не працює в перенаправленнях .
Вставка символів вертикальної риски до таблиць
Функції парсера спотворять синтаксис вікітаблиці та вертикальні риски (|
), розцінюючи всі сирі символи вертикальних рисок як роздільники параметрів.
Для уникнення цього більшість вікіпедій використовували шаблон Template:!, вмістом якого був тільки сирий символ вертикальної риски (|
), починаючи з MW 1.24 {{!}}
магічне слово замінило цей kludge.
Це «ховає» вертикальну риску від парсера MediaWiki, забезпечуючи те, що він не розглянеться до того, як усі шаблони та змінні на сторінці не будуть розширені.
Потім він інтерпретується як рядом таблиці чи роздільник колонки.
Альтернативно, синтаксис сирої таблиці HTML може бути використано, хоча це менш інтуїтивно та ухильніше до помилок.
Ви також можете екранувати символ «pipe» для відображення як простий, неінтерпретований символ за допомогою сутності HTML: |
.
Опис | Ви пишете | Ви отримуєте |
---|---|---|
Екранування символу «pipe» як роздільника рядка чи колонки таблиці | {{!}} |
| |
Екранування символу «pipe» як простого символу | | |
| |
Прибирання пробільних символів
Пробільні символи, включаючи символи нового рядка, символи табуляції та пробіли, прибираються із початку та з кінця всіх параметрів всіх функцій парсера. Якщо при порівнянні текстових рядків, пробільні символи в початку чи в кінці текстового рядка, що є аргументом функції, все ж таки потрібні, цей текстовий рядок можна помістити у подвійні лапки.
{{#ifeq: foo | foo | equal | not equal }}
→ equal{{#ifeq: "foo " | " foo" | equal | not equal }}
→ not equal
Щоб уникнути прибирання пробільних символів в аргументах функції #if можна скористатися шаблоном m:Template:If або використати <nowiki > </nowiki> замість пробілів.
foo{{#if:|| bar }}foo
→ foobarfoofoo{{#if:||<nowiki /> bar <nowiki />}}foo
→ foo bar foo
Однак, цей метод може бути використаний для рендерингу тільки єдиного пробільного символу, оскільки парсер стискає багато пробільних символів у рядку в один.
<span style="white-space: pre;">foo{{#if:||<nowiki/> bar <nowiki/>}}foo</span>
→ foo bar foo
У цьому прикладі стиль white-space: pre
використовується, щоб примусово зберігати пробіли браузером, але навіть із ним пробіли не показуються. Це стається тому, що пробіли are stripped програмним забезпеченням, до надсилання у браузер.
Можливо обійти цю поведінку, замінивши whitespaces на  
(розривний пробіл) або
(нерозривний пробіл), адже вони не модифікуються програмним забезпеченням:
<span style="white-space: pre;">foo{{#if:||   bar   }}foo</span>
→ foo bar foofoo{{#if:|| bar }}foo
→ foo bar foo
Beware that not all parameters are created equal. In ParserFunctions, whitespace at the beginning and end is always stripped. In templates , whitespace at the beginning and end is stripped for named parameters and named unnamed parameters but not from unnamed parameters:
Other parser functions
Case conversion functions
- Lowercase:
"{{lc: AbC}}"
→ "abc" [1] - Uppercase:
"{{uc: AbC}}"
→ "ABC" [2] - Lowercase first character:
"{{lcfirst: AbC}}"
→ "abC" [3] - Uppercase first character:
"{{ucfirst: abc}}"
→ "Abc" [4]
Encoding functions
- URL encoding:
"{{urlencode: AbC
dEf ghi}}"
renders as
"AbC%0AdEf+ghi"
So inner new lines convert into %0A, and inner spaces convert into +.
Anchor encoding
{{anchorencode: AbC dEf ghi}}
renders as
AbC_dEf_ghi
Padding functions
"{{padleft: bc d |8|a}}"
gives "aaaabc d" [5]
"{{padright: bc d |8|a}}"
gives "bc daaaa" [6]
Formatting functions
"{{formatnum: 1234567890}}"
gives "1 234 567 890" [7]
Див. також
- Довідка:Функції парсера в шаблонах
- Теги розширень парсера
- Parser function hooks - an (incomplete) list of parser functions added by core and extensions.
- m:Help:Newlines and spaces
- Manual:Converting between ParserFunctions syntax and TeX syntax
- Довідка:Магічні слова
- Module:String що замінив Extension:StringFunctions
- Extension:PhpTags
- Parser functions for Wikibase (the extensions that enables Wikidata): d:Wikidata:How to use data on Wikimedia projects#Parser function
Примітки
- ↑ До випуску версії r86805 в 2011 році, це не завжди було так.
- ↑ ParserFunctions.php на phabricator.wikimedia.org