![]() | Зверніть увагу! Коли Ви редагуєте цю сторінку, то погоджуєтесь робити свій внесок під ліцензієюCC0. Детальніше про умови ліцензії можна дізнатися насторінці довідки. | ![]() |
РозширенняParserFunctions впроваджує одинадцять додатковихфункцій парсера на додачу до«магічних слів», які вже присутні у MediaWiki.(Можна налаштувати конфігурацію для впровадження інших функцій парсера для обробки текстових рядків; ці функції для рядків задокументовані віншому місці.)Всі парсерні функції впроваджені цим розширенням мають таку форму:
{{#ім'я_функції:аргумент 1 |аргумент 2 |аргумент 3 … }}
Тип | Оператори |
---|---|
Групування (круглі дужки) | ( ) |
Числа | 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}} повертає значення 18 137 930, при тому що потрібним значенням є 18137930, яке можна отримати за допомогою{{formatnum:{{NUMBEROFUSERS}}|R}}
.Це особливо важливо для деяких мов, де числа записуються не арабськими цифрами.Наприклад, для бенгальської мови {{NUMBEROFUSERS}} поверне ৩০,০৬১.
{{#expr:{{NUMBEROFUSERS}}+100}}
→Expression error: Unrecognized punctuation character " ".{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}
→18138030![]() | Операторmod дає неправильні результати для деяких значень другого аргументу:
|
Операторокруглення округляє число зліва від нього до 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.5678round -2 }} | 1200 | Округлено до найближчого числа кратного 100, оскільки від'ємна експонента (число справа) округляє вліво від десяткової точки | ||
{{#expr: 1234.5678round 2 }} | 1234.57 | Округлено до найближчої сотої частини, оскільки додатня експонента (число справа) округляє вправо від десяткової точки | ||
{{#expr: 1234.5678 round 2.3 }} | 1234.57 | Дробова частина експоненти не враховується і не впливає на результат округлення | ||
{{#expr:trunc 1234.5678 }} | 1234 | Відкидання дробової частини | ||
Округлення до найближчого цілого числа | ||||
{{#expr: 1/3round 0 }} | 0 | Округлення донайближчого цілого числа, в даному випадку до нуля, який є меншим за вхідне значення | ||
{{#expr: 1/2round 0 }} | 1 | Округлення до найближчого цілого числа, в даному випадку до одиниці, яка є більшою за вхідне значення | ||
{{#expr: 3/4round 0 }} | 1 | Округлення до найближчого цілого числа, в даному випадку до одиниці, яка є більшою за вхідне значення | ||
{{#expr: -1/3round 0 }} | -0 | Округлення до найближчого цілого числа, в даному випадку до нуля, який є більшим за вхідне значення | ||
{{#expr: -1/2round 0 }} | -1 | Округлення до найближчого цілого числа, яке є від'ємним та меншим за вхідне значення | ||
{{#expr: -3/4round 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:| yes| no}}
→no{{#if: string| yes| no}}
→yes{{#if: | yes| no}}
→yes{{#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|значення, якщо тестовий рядок порожній (або містить тільки пробільні символи)}}}}
Також, можна використовувати параметр в якості тестового рядку у функції#if
. Необхідно переконатися, що ви додано символ|
(вертикальна риска) після імені змінної.(так що, якщо параметр не має значення, то він оцінюється в порожній рядок замість рядка «{{{1}}}
»)
{{#if:{{{1|}}}|Ви ввели текст у змінній 1|Тексту у змінній 1 немає}}
Див.Довідка:Функції парсера в шаблонах для інших прикладів використання цієї функції парсера.
Ця функція парсера порівнює два введені рядки, визначає чи є вони ідентичними та повертає один з двох текстових рядків залежно від результату.Якщо вимагається більша кількість порівнянь і вихідних рядків, розгляньте використання#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![]() | При використанні всередині функції парсера, будь-які теги та інші функції парсера мають бути замінені наунікальний код. Це впливає на порівняння таким чином:
|
![]() | Порівняння текстового рядка ізмагічним словом, яке повертає назву сторінки, може не спрацювати залежно від конфігурації сайту. Наприклад, {{FULLPAGENAME}}, залежно від вікі, може зробити першу літеру великою і замінити всі пробіли на знаки підкреслення. Для обходу цього застосуйте магічне слово до обох параметрів:
|
Функція приймає на вході текстовий рядок і повертає значення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:<strongclass="error">a</strong>| error| correct}}
→errorSome errors may cause a tracking category to be added, using{{#iferror:}}
will not suppress the addition of the category.
Ця функція обчислює математичний вираз та повертає один з двох текстових рядків залежно від логічного значення результату:
{{#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![]() | Результати порівняння чисел з#ifexpr не завжди співпадають з результатами#ifeq і#switch . Два останні є точнішими за#ifexpr і не повертають еквівалентні результати.Розгляньте ці порівняння зі зміненою останньою цифрою:
Оскільки PHP, що використовується в
З іншою цифрою результат рівності дійсно некоректний. Така поведінка#ifexpr пояснюється тим, що MediaWiki перетворює числа у виразах начисла з рухомою комою, що для великих чисел, як ті що використані в прикладі, передбачає деяку степінь округлення. |
Ця функція бере на вході текстовий рядок, інтерпретує його як назву сторінку, та повертає один з двох текстових рядків залежно від того чи існує сторінка на цій вікі.
{{#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 }}
→doesn't exist (оскількиMediaWiki:Copyright не було адаптовано)Якщо на одній сторінці перевіряється існування другої за допомогою#ifexist:
, то перша (та на якій перевіряється) з'явиться в спискуSpecial:WhatLinksHere для другої (та яка перевіряється). Тому, якщо $code1:Foo $code2 було би включене до цієї сторінки, то $fullpagename2 з'явилась би в списку$wth/Foo.So if the code{{#ifexist:Foo }}
were included live on this page (Help:Extension:ParserFunctions/uk),Special:WhatLinksHere/Foo will list Help:Extension:ParserFunctions/uk.
На вікі, які використовують спільний репозиторій медіафайлів (зокрема Вікісховище), функція#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 intoCategory:Pages with too many expensive parser function calls.Також, сторінки із таким перевищенням обмеження додаються докатегорії спостереження $category, чия назва може відрізнятися залежно від мови вікі.
Для деяких випадків можливо імітувати функцію «ifexist» за допомогою CSS, використовуючи селекториa.new
(щоб вибрати посилання на неіснуючі статті) абоa:not(.new)
(щоб вибрати посилання на існуючі статті).Крім того, оскільки максимальна кількість викликів ресурсомістких функцій на одній сторінці вказана в$wgExpensiveParserFunctionLimit
, то можна показати більшу кількість у файлі LocalSettings.php за потреби.
Сторінку, яка не існує та випробовується для використання #ifexist, буде додано доБажані сторінки.Див.T14019 щодо причини цього йw:Template:Linkless exists за обхідним шляхом.
Ця функція перетворює відносний шлях до файла на абсолютний.
{{#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 }}
→Помилка: неправильна глибина шляху: «Help:Foo/bar/baz/../../../../quok» (спроба доступу до вузла, що знаходиться вище, ніж кореневий)For a similar group of functions see alsoHelp:Magic words#URL data.Built-in parser functions include: 'localurl:', 'fullurl:', 'anchorencode:' etc.
Див. також: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![]() | Порівняння чисел в#switch та#ifeq здійснюються відмінно від того як це робиться у математичних виразах (див. вище):
|
Текстові рядки випадків не можуть містити знаків рівності. Щоб обійти це обмеження, використайте магічне слово{{=}} або замість символу рівності вставте його 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 |
Функція#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}}}}}}
Код | Опис | Результат для поточного моменту (Очистіть кеш цієї сторінки для оновлення результатів) |
---|---|---|
Рік | ||
Y | Рік в чотирьох цифрах. | 2025 |
y | Останні дві цифри року. | 25 |
L | 1 якщо рік високосний, 0 якщо ні. | 0 |
o [note 1] | Рік вказаного тижня відповідно до ISO-8601.[note 2] | 2025[note 3] |
Місяць | ||
n | Номер місяця без додавання нуля спереду. | 7 |
m | Номер місяця із додаванням нуля спереду за потреби. | 07 |
M | Скорочена назва місяця мовою сайту. | лип |
F | Повна назва місяця мовою сайту. | липень |
xg | Виводить повну назву місяця вродовому відмінку мовою сайту, для розділення родового таназивного відмінку. Така можливість є корисною для багатьохслов'янських мов, наприклад польської, російської, білоруської, чеської, словацької, словенської, української тощо. | Для польської мови:{{#time:F Y|June 2010|pl}} → czerwiec 2010(називний відмінок) {{#time:d xg Y|20 June 2010|pl}} → 20 czerwca 2010(родовий відмінок) |
День місяця або року | ||
j | День місяця без додавання нуля спереду. | 18 |
d | День місяця із додаванням нуля спереду за потреби. | 18 |
z | День року (1 січня = 0).![]() | 198 |
Тиждень та день тижня | ||
W | Номер тижня за ISO 8601 із додаванням нуля спереду за потреби. | 29 |
N | Номер дня тижня за ISO 8601 (понеділок = 1, неділя = 7). | 5 |
w | Номер дня тижня (неділя = 0, субота = 6). | 5 |
D | Скорочення назви дня тижня. Перекладено не на всі мови. | Пт |
l | Повна назва дня тижня. Перекладено не на всі мови. | п'ятниця |
Година | ||
a | «am» в першій половині дня (00:00:00 → 11:59:59), «pm» в другій (12:00:00 → 23:59:59). | pm |
A | Те саме що іa зверху, тільки великими літерами. | PM |
g | Година в 12-годинному форматі без додавання нуля спереду. | 7 |
h | Година в 12-годинному форматі із додаванням нуля спереду за потреби. | 07 |
G | Година в 24-годинному форматі без додавання нуля спереду. | 19 |
H | Година в 24-годинному форматі із додаванням нуля спереду за потреби. | 19 |
Хвилини та секунди | ||
i | Хвилини із додаванням нуля спереду за потреби. | 49 |
s | Секунди із додаванням нуля спереду за потреби. | 25 |
U | Час Unix. Кількість секунд що пройшли із 1 січня 1970 року, 00:00:00 GMT. | 1752868165 |
Часовий пояс (відповідно до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 . | 2025-07-18T19:49:25+00:00 |
r | Дата форматована заRFC 5322, еквівалентна доD, j M Y H:i:s +0000 , де назва дня тижня та назва місяця тільки англійською. | Fri, 18 Jul 2025 19:49:25 +0000 |
Негрегоріанські календарі | ||
Мусульманський | ||
xmj | День місяця. | 22 |
xmF | Повна назва місяця. | мухаррама |
xmn | Номер місяця. | 1 |
xmY | Рік повністю. | 1447 |
Іранський | ||
xit | Кількість днів у поточному місяці. | 31 |
xiz | День року. | 119 |
xij | День місяця. | 27 |
xiF | Повна назва місяця. | тіра |
xin | Номер місяця. | 4 |
xiY | Рік повністю. | 1404 |
xiy | Останні дві цифри року. | 04 |
Єврейський | ||
xjj | День місяця. | 22 |
xjF | Повна назва місяця. | Тамуз |
xjt | Кількість днів у поточному місяці. | 29 |
xjx | Назва місяця в родовому відмінку. | Тамуза |
xjn | Номер місяця. | 10 |
xjY | Рік повністю. | 5785 |
Тайський сонячний | ||
xkY | Повний рік утайському сонячному календарі.![]() | 2568 |
Міньго/Чучхе | ||
xoY | Рік повністю. | 114 |
Японське ненґо | ||
xtY | Рік повністю. | 令和7 |
Прапори | ||
xn | Форматувати наступний числовий код як число в ASCII. | В мові гінді,{{#time:H, xnH}} повертає ०६, 06. |
xN | Те саме що іxn , але як переключений прапор, який діє аж до кінця рядка або до наступної появиxN в текстовому рядку. | |
xr | Форматує наступне число у вигляді числа із римськими цифрами. Працює тільки для чисел що не перевищують 10 000 (3 000 в MediaWiki до версії 1.20). | {{#time:xrY}} → MMXXV |
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}}
→2025-07-18{{#time:[[Y]] m d}}
→2025 07 18{{#time:[[Y (year)]]}}
→2025 (25UTCpmFri, 18 Jul 2025 19:49:25 +0000){{#time:[[Y "(year)"]]}}
→2025 (year){{#time: i's"}}
→49'25"Об'єкт дати/часу
можна задавати в будь-якому форматі який допускається у функції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}}
→Fri, 18 Jul 2025 19:49:25 +0000{{#time: r|+2 hours}}
→Fri, 18 Jul 2025 21:49:25 +0000{{#time: r|now + 2 hours}}
→Fri, 18 Jul 2025 21:49:25 +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}}
→Помилка: неправильний час{{#time: r|last tuesday}}
→Tue, 15 Jul 2025 00:00:00 +0000Код мови
у форматі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}}
→2025 luglio 18 19:49:25{{#time: Y F d H:i:s|now|it|1}}
→2025 luglio 18 19:49:25{{#time: Y F d H:i:s|+2 hours||0}}
→2025 липень 18 21:49:25{{#time: Y F d H:i:s|+2 hours||1}}
→2025 липень 18 21:49:25{{#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}}
→1752868165{{#time: r | @1752868165 }}
→Fri, 18 Jul 2025 19:49:25 +0000![]() | Без вказання символу
|
![]() | Допустимим є час в проміжку від 1 січня 0111 до 31 грудня 9999. Для років від 100 до 100 не завжди правильний, так само як і для Y та високосних років. Коди r, D, l та U трактують ці роки як 2000-2010.
Роки з однозначним чи двозначним числовим записом, тобто 0-99, трактуються як 2000-2069 та 1970-1999, окрім випадку коли вони записані як чотиризначні числа що починаються з нулів:
|
Дати можна вказувати не тільки повністю, але і частково; функція доповнить частини дати яких не вистачає, використовуючи значення для поточного моменту:
{{#time: Y| January 1}}
→2025![]() | Доповнення частин дати доповнює не всі частини дати; деякі частини доповнюються значеннями для поточного моменту, деякі ні:
Є виняток із заповненим днем:
|
Чотиризначне число завжди трактується як рік, і ніколи як години та хвилини:[1]
{{#time: Y m d H:i:s| 1959}}
→1959 07 18 00:00:00Шестизначне число трактується як години, хвилини та секунди, якщо це можливо, інакше як помилка (не як рік та місяць):
{{#time: Y m d H:i:s| 195909}}
→2025 07 18 19:59:09 Введене значення трактується як час, а не рік і місяць.{{#time: Y m d H:i:s| 196009}}
→Помилка: неправильний час Попри те що 19:60:09 не є коректним часом, 196009 не трактується як вересень 1960 року.Функція може здійснювати деякі перетворення дати:
{{#time: d F Y| January 0 2008}}
→31 грудень 2007{{#time: d F| January 32}}
→Помилка: неправильний час{{#time: d F| February 29 2008}}
→29 лютий{{#time: d F| February 29 2007}}
→01 березень{{#time:Y-F|now -1 months}}
→2025-червеньДовжина вхідних даних для функції#time
має обмеження в 6000 символів[2].
Існує недолік в роботі функції #time (а саме у класі «DateTime» мови PHP, який використовується цією функцією) який не дозволяє нецілі значення в якості зміщення в годинах для часових поясів. Це не стосується випадків для часових поясів із зміщенням у цілу кількість годин, таких як EDT. Наприклад:
{{#time:g:i A| -4 hours}}
→ 3:49 PMАле Індія має часовий зсув +5.5 годин від UTC, тому застосування її часового поясу не дозволить правильно обчислити відносний зсув часового поясу. Відбудеться ось що:
{{#time:g:i A| +5.5 hours}}
→ 7:49 PMЩоб уникнути цієї проблеми, просто вкажіть зміщення часу у хвилинах чи секундах, наприклад:
{{#time:g:i A| +330 minutes}}
→ 1:19 AM{{#time:g:i A| +19800 seconds}}
→ 1:19 AM(Тім Старлінг, розробник цієї функції, запропонував синтаксис для вирішення цієї проблеми.)
Sometimes it is useful to construct a timestamp, which looks like the automatic timestamp generated bysignatures in discussions on talk pages.On an English-language wiki, it can be created with:
{{#timel:H:i, j xg Y (e)|+330 minutes}}
→ 01:19, 19 липня 2025 (UTC)Ця функція є ідентичною до{{#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}}
→2025-07-18T19:49:25+00:00{{#time:c|now|it|0}}
→2025-07-18T19:49:25+00:00{{#time:c|now|it|1}}
→2025-07-18T19:49:25+00:00{{#timel:c|now|it}}
→2025-07-18T19:49:25+00:00![]() | Пам'ятайте, що код U як в #time, так в #timel, поверне однакову кількість секунд що пройшли з моменту 00:00:00 1 січня 1970 року за UTC навіть у вікі з часовим поясом що відрізняється від UTC (раніше відомий як GMT)
|
This function formats a date using a standard format for the selected language, as defined in$dateFormats
(seeT223772).
{{#timef:date/time object }}
{{#timef:date/time object |format type }}
{{#timef:date/time object |format type |language code }}
The format of thedate/time object is the same as for#time. If it is empty, the time when the page was rendered is used.
Theformat type may be one of:
time
date
both
pretty
If theformat type is not specified, both the time and date will be show, as ifboth
were specified.
If thelanguage code is not specified, the page's content language is used.
Using#timef
instead of#time
allows templates to more easily support multiple languages, since different languages have different ways to format dates.
In English, the order of the day and month is controlled by$wgAmericanDates
.
Examples:
{{#timef:now|both|en}}
→ 19:49, 18 July 2025{{#timef:now|both|ja}}
→ 2025年7月18日 (金) 19:49{{#timef:now|pretty|en}}
→ 18 July{{#timef:now|pretty|pl}}
→ 18 lipca{{#timef:|time}}
→ 19:49This function is the same as#timef except that it uses the local timezone of the wiki as configured in$wgLocaltimezone.
{{#timefl:date/time object }}
{{#timefl:date/time object |format type }}
{{#timefl:date/time object |format type |language code }}
Ця функція поділяє назву сторінки на сегменти, що розділені символами косої риски. Після цього деякі із цих сегментів повертаються в якості результату.
{{#titleparts:назва сторінки |кількість сегментів для повернення |перший сегмент, який повертається }}
Якщокількість сегментів, що треба повернути не вказано, то вона отримує значення за замовчуванням «0», яке повертає всі сегменти відсегмент з якого почати до кінця. Якщо не вказаносегмент з якого почати або для нього вказане значення «0», то аргумент отримує значення за замовчуванням «1»:
{{#titleparts:Talk:Foo/bar/baz/quok }}
→Talk:Foo/bar/baz/quok{{#titleparts:Talk:Foo/bar/baz/quok | 1 }}
→Talk:FooSee 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 буд замінене на"
.{{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, попри підкреслення в оригіналі.{{#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{{#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![]() | Певні символи, заборонені в назвах сторінок, змусять #titleparts не парсити рядок.
|
![]() | Якщо будь-якою частиною назви є просто «
|
![]() | Ця функція не деградує витончено, якщо введення перевищує 255 байтів у UTF-8. Якщо вхідний рядок складається з 256 байтів або більше, то повертається весь рядок. |
The ParserFunctions extension optionally defines various string functions if$wgPFEnableStringFunctions
is set totrue
:
#len
#pos
#rpos
#sub
#count
#replace
#explode
#urldecode
See the dedicated subpage for documentation, andManual:Performing string operations with parser functions for examples.
![]() | In 2013, it was decided thatthese functions willnever be enabled on any Wikimedia wiki, because they are inefficient when used on a large scale (seephab:T8455 for some history).These functions do NOT work on Wikimedia wikis! If you are here to write something on a Wikimedia project, you are looking for something else: if your home wiki has string functions, it probably usesLua.For example, the English Wikipedia usesModule:String, which does some of the same things with wildly different syntax.There are also individualString-handling templates. |
Here is a short overview ofModule:String functions:
{{#invoke:String|len|target_string}}
{{#invoke:String|sub|target_string|start_index|end_index}}
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
{{#invoke:String|pos|target_string|index_value}}
{{#invoke:String|find|source_string|target_string|start_index|plain_flag}}
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
{{#invoke:String|rep|source|count}}
{{#invoke:String|escapePattern|pattern_string}}
{{#invoke:String|count|source_str|pattern_string|plain_flag}}
{{#invoke:String|join|separator|string1|string2|...}}
Функції парсера можуть бутипідставлені. Для цього вкажіть префіксsubst:
перед знаком решітки у виклику функції:
{{subst:#ifexist: Help:Extension:ParserFunctions/uk | [[Help:Extension:ParserFunctions/uk]] | Help:Extension:ParserFunctions/uk }}
→ код[[Help:Extension:ParserFunctions/uk]]
буде вставлений до вікітексту оскільки сторінка Help:Extension:ParserFunctions/uk існує.![]() | Результати підставлених функцій парсера невизначені, якщо вирази містятьнепідставлений volatile код на кшталтзмінних чи інших функцій парсера. Для узгоджених результатів увесь volatile код у обчислюваному виразі повинен бути підставлений. Див.Довідка:Підстановка. |
Підстановка не працює в<ref>
…</ref>
; ви можете використати{{subst:#tag:ref|
…}}
з цією метою.
Підстановка поточного часу за допомогою{{#time:
…|now-
…}}, хоч і може використовуватись в посиланнях, але не працює вперенаправленнях.
Функції парсера спотворять синтаксисвікітаблиці та вертикальні риски (|
), розцінюючи всі сирі символи вертикальних рисок як роздільники параметрів.Для уникнення цього більшість вікіпедій використовували шаблонTemplate:!, вмістом якого був тільки сирий символ вертикальної риски (|
), починаючи з MW 1.24{{!}}
магічне слово замінило цей kludge.Це «ховає» вертикальну риску від парсера MediaWiki, забезпечуючи те, що він не розглянеться до того, як усі шаблони та змінні на сторінці не будуть розширені.Потім він інтерпретується як рядом таблиці чи роздільник колонки.Альтернативно, синтаксис сирої таблиці HTML може бути використано, хоча це менш інтуїтивно та ухильніше до помилок.
Ви також можете екранувати символ «pipe» для відображення як простий, неінтерпретований символ за допомогою сутності HTML:|
.
Опис | Ви пишете | Ви отримуєте |
---|---|---|
Екранування символу «pipe» як роздільника рядка чи колонки таблиці | {{!}} | | |
Екранування символу «pipe» як простого символу | | | | |
The same pipe protection applies as for the following example:
{{Documentation|content=... text before ...<code>subpage-name=sandbox3</code> is equivalent to <code>sandbox link=../sandbox3 | sandbox name=sandbox3</code>.... text after ...}}
We observe thattext after is not displayed when the pipe | just beforesandbox name= is present since|sandbox name= is considered erroneously to be a parameter of templateDocumentation at the same level as|content= is.
Пробільні символи, включаючи символи нового рядка, символи табуляції та пробіли, прибираються із початку та з кінця всіх параметрів всіх функцій парсера. Якщо при порівнянні текстових рядків, пробільні символи в початку чи в кінці текстового рядка, що є аргументом функції, все ж таки потрібні, цей текстовий рядок можна помістити у подвійні лапки.
{{#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Однак, цей метод може бути використаний для рендерингу тількиєдиного пробільного символу, оскільки парсер стискає багато пробільних символів у рядку в один.
<spanstyle="white-space: pre;">foo{{#if:||<nowiki/> bar<nowiki/>}}foo</span> | → | foo bar foo |
У цьому прикладі стильwhite-space: pre
використовується, щоб примусово зберігати пробіли браузером, але навіть із ним пробіли не показуються. Це стається тому, що пробіли are stripped програмним забезпеченням, до надсилання у браузер.
Можливо обійти цю поведінку, замінивши whitespaces на 
(розривний пробіл) або
(нерозривний пробіл), адже вони не модифікуються програмним забезпеченням:
<spanstyle="white-space: pre;">foo{{#if:||   bar   }}foo</span>
→foo bar foofoo{{#if:|| bar }}foo
→foo bar fooBeware that not all parameters are created equal.In ParserFunctions, whitespace at the beginning and end is always stripped.Intemplates, whitespace at the beginning and end is stripped for named parameters and named unnamed parameters butnot from unnamed parameters:
"{{lc: AbC}}"
→ "abc"[1]"{{uc: AbC}}"
→ "ABC"[2]"{{lcfirst: AbC}}"
→ "abC"[3]"{{ucfirst: abc}}"
→ "Abc"[4]"{{urlencode: AbCdEf ghi}}"
renders as
"AbC%0AdEf+ghi"
So inner new lines convert into %0A, and inner spaces convert into +.
{{anchorencode: AbC dEf ghi}}
renders as
AbC_dEf_ghi