Википеди:Парсера функцеш
Информация о расширении на данной странице могла устареть. Обновленная и более подробная информация находится на странице MediaWiki. |
Базовый набор функций парсера известен под названием magic words («волшебные слова», «магические слова»). См. также mw:Help:Extension:ParserFunctions и mw:Extension:StringFunctions. Общий синтаксис функций парсера таков:
{{#функция: аргумент 1 | аргумент 2 | аргумент 3 ... }}
Если необходимо, чтобы значение, выдаваемое парсером, было частью таблицы, необходимо вместо символа вертикальной черты использовать шаблоны-подстановки — {{!-}}, {{!}}, {{!!}}, — которые адекватно воспринимается функциями парсера, и при формировании страницы движком MediaWiki раскрываются в символы, формирующие таблицу — |-, |, ||.
Для формирования таблицы можно также использовать язык HTML:
— аналогично{|-и-|};— начинает строку; — создает ячейку в строке… Функции
[тоаде чура]#expr
[тоаде чура]Функция #expr производит математические вычисления над числами или переменными/параметрами, приводимыми к числам. Синтаксис:
{{#expr: выражение }}
Поддерживаются следующие операторы (перечислены в порядке, примерно соответствующем их приоритету):
Оператор Действие Пример — {{#expr: 123456789012345 }} = 1.2345678901234E+14
{{#expr: 0.000001 }} = 1.0E-6
() Операторы группирования {{#expr: (30 + 7) * 7 }} = 259 + Унарный знак + {{#expr: +30 * +7 }} = 210 - Унарный знак - (инвертирование знака) {{#expr: -30 * -7 }} = 210 not Унарное либо логическое НЕ {{#expr: not 0 * 7 }} = 7
{{#expr: not 30+7 }} = 7* Умножение {{#expr: 30 * 7 }} = 210 / Деление, эквивалент div {{#expr: 30 / 7 }} = 4.2857142857143 ^ Возведение в степень {{#expr: 3 ^ 2 }} = 9 div Деление, эквивалент / (целочисленного деления нет) {{#expr: 30 div 7 }} = 4.2857142857143
{{#expr: 5 div 2 * 2 + 5 mod 2 }} = 6mod Остаток от деления, получается делением операндов, у которых отброшены дробные части
(обратите внимание, что div и mod работают не как в обычных языках программирования){{#expr: 30 mod 7 }} = 2
{{#expr: -8 mod -3 }} = -2
{{#expr: -8 mod +3 }} = -2
{{#expr: 8 mod 2.7 }} = 0
{{#expr: 8 mod 3.2 }} = 2
{{#expr: 8.9 mod 3 }} = 2+ Сложение {{#expr: 30 + 7 }} = 37 - Вычитание {{#expr: 30 - 7 }} = 23 round Округляет левый операнд до 1/10 в степени правого операнда {{#expr: 30 / 7 round 3 }} = 4.286
{{#expr: 30 / 7 round 0 }} = 4
{{#expr: 3456 round -2 }} = 3500= Равенство (численное и булево сравнение) {{#expr: 30 = 7 }} = 0 <> Неравенство, эквивалент != {{#expr: 30 <> 7 }} = 1 != Неравенство, эквивалент <> и логического xor {{#expr: 1 != 0 }} = 1 < Меньше {{#expr: 30 < 7 }} = 0 > Больше {{#expr: 30 > 7 }} = 1 <= Меньше или равно {{#expr: 30 <= 7 }} = 0 >= Больше или равно {{#expr: 30 >= 7 }} = 1 and Логическое И {{#expr: 4 < 5 and 4 mod 2 }} = 0 or Логическое ИЛИ {{#expr: 4 < 5 or 4 mod 2 }} = 1 sin Синус {{#expr: sin(1.57) }} = 0.99999968293183 cos Косинус {{#expr: cos(1.57) }} = 0.00079632671073326 tan Тангенс {{#expr: tan(0) }} = 0 Это не все имеющиеся операторы. Более подробная документация по операторам функции — m:Help:Calculation.
Как всегда, лучше поставить лишние скобки, чем ломать голову с порядком вычисления.
На выводе логических переменных 0 означает ложь, а 1 — истину.
Например:
{{#expr: (100 - 32) / 9 * 5 round 0 }}выдаёт: 38.
Произведено преобразование 100° по Фаренгейту в градусы по Цельсию с округлением до ближайшего целого числа.
#if
[тоаде чура]Функция #if («если») служит для создания конструкций вида if-then-else. Её синтаксис таков:
{{#if: тестовая строка | текст, если непуста | текст, если пуста }}
Если тестовая строка пуста или состоит только из пробелов, то возвращается текст, если пуста; в обратном случае возвращается текст, если непуста. Последний параметр может быть опущен — в этом случае при пустой строке будет возвращена пустая строка.
Обратите внимание, что #if не поддерживает сравнение при помощи «=» и прочие математические операции. Так,
{{#if: 1 = 2 | да | нет }}вернёт «да», так как строка1 = 2непуста. Для сравнения строк используйте #ifeq. Для сравнения чисел используйте #ifexpr.Содержимое после вертикальных черт воспринимается как написанное с начала строки, поэтому символы «*», «:», «;» и прочие на первой позиции преобразуются в соответствующие элементы вёрстки. Чтобы этого избежать, ставьте перед ними тег
<nowiki/>или заменяйте на HTML-сущности Ло:Amp, Ло:Amp и Ло:Amp соответственно.#ifeq
[тоаде чура]Функция #ifeq («if equal», «если равны») сравнивает две строки, возвращая ещё одну строку в зависимости от результата сравнения. Её синтаксис таков:
{{#ifeq: строка для сравнения 1 | строка для сравнения 2 | текст, если равны | текст, если не равны }}
#ifexist
[тоаде чура]Функция #ifexist («if exist», «если существует») похожа по синтаксису на #if, только вместо условия проверяется существование статьи с указанным заголовком. Проверка выполняется с учётом регистра после приведения проверяемого заголовка к каноническому виду (если в начале стоит строчная буква, то она преобразуется в прописную). Например:
- {{#ifexist: User:Js | Участник есть | Участника нет }} вернёт Участника нет, поскольку страница User:Js существует.
- {{#ifexist: user:js | Участник есть | Участника нет }} вернёт Участника нет, поскольку user:js при приведении к канонической форме даст User:Js.
- {{#ifexist: User:JS | Участник есть | Участника нет }} вернёт Участника нет, поскольку страница User:JS не существует.
{{#ifexist}} не работает с относительными путями типа /подстраница.
Для пространства имён «Файл» (оно же «File», «Изображение») проверяется наличие только локального файла, но не файла на Викискладе. Для проверки наличия доступного файла также и на Викискладе, нужно использовать префикс «Mediа:».
Пример (файл Example.png загружен только на Викисклад):
- {{#ifexist: Файл:Example.png | есть | нет }} вернёт нет
- {{#ifexist: Изображение:Example.png | есть | нет }} вернёт нет
- {{#ifexist: Media:Example.png | есть | нет }} вернёт есть
Если была создана локальная страница описания файла с Викисклада, все 3 варианта вернут «есть».
Также работает с параметрами шаблонов.
Количество вызовов этой функции на одной странице ограничено. Если страница преодолела это ограничение, она попадает в категорию Википедия:Страницы, в которых слишком много ifexist. Это необходимо каким-либо образом исправить.
#ifexpr
[тоаде чура]#ifexpr вычисляет математическое выражение и возвращает одну из двух строк в зависимости от результата.
{{#ifexpr: выражение | текст, если истина | текст в противном случае }}
Математический синтаксис такой же, как у #expr.
#switch
[тоаде чура]#switch сравнивает одно значение со многими, возвращая результат, если найдено совпадение. Если совпадение не найдено, то возвращается указанный в конце записи результат по умолчанию (он обязательно должен быть последним). Наличие этого результата необязательно, и в случае отсутствия его и совпадений ничего возвращено не будет.
{{#switch: сравниваемая величина | значение1 = результат1 | значение2 = результат2 | ... | значениеn = результатn | результат по умолчанию }}
Если для нескольких значений должен быть одинаковый результат, то запись можно сократить:
{{#switch: сравниваемая величина | значение1a | значение1b | ... | значение1x = результат1 | значение2a | значение2b | ... | значение2y = результат2 | ... | значениеNa | значениеNb | ... | значениеNz = результатN | результат по умолчанию }}
#switch может использоваться вместо одного или нескольких #ifeq:
- {{#switch: a | a = true | false }} даёт true
- {{#ifeq: a | a | true | false }} даёт true
Если сравниваемая величина или значения содержит знак равенства (=), то #switch не сможет правильно сравнить её и значения. Для этого нужно обязательно в значениях (но необязательно в сравниваемой величине) использовать шаблон {{=}}, который содержит знак равенства, или код Ло:Amp:
- {{#switch: 1=2
- | 1=2 = raw
- | 1<nowiki>=</nowiki>2 = nowiki
- | 1=2 = html
- | 1{{=}}2 = template
- | default
- }} → html
Если результат по умолчанию содержит знаки «=», перед ним можно написать
#default =.#time
[тоаде чура]#time — функция, позволяющая выводить время и дату в заданом формате. Синтаксис:
{{#time: формат }} {{#time: формат | время }} {{#time: формат | время | язык }}
Параметр время принимает дату в формате гггг-мм-чч, где гггг — год, мм — номер месяца, чч — число месяца. Если параметр не задан, то используется текущее время и дата.
Параметр язык принимает код языка по ISO 639-1. Если параметр не задан, то время и дата выводятся на русском языке.
Из-за кэширования возможно различие между реальным временем и отображаемым. Для ручного обновления сохраните страницу, не делая никаких изменений, или перейдите по адресу http://ru.wikipedia.org/wiki/Имя_страницы?action=purge (подробнее см. Википедия:Кэш#Чистить/актуализировать кэш сервера).
Параметр формат подобен используемому в PHP-функции date():
Символ Описание Пример Текущее значение d День месяца с нулём 04 16 D Краткое название дня недели Пн пIаьраска j День месяца без нуля 4 16 l Полное название дня недели понедельник пӀаьраска N Номер дня недели ISO 8601 1 (понедельник) — 7 (воскресенье) 5 w Номер дня недели 0 (воскресенье) — 6 (суббота) 5 z Номер дня года (начиная с 0) 0—365 288 W Номер недели ISO 8601 42 F Полное название месяца в именительном падеже январь ардара xg Полное название месяца в родительном падеже января ардара m Номер месяца с нулём 01—12 10 M Краткое название месяца сен ардара n Номер месяца без нуля 1—12 10 t Количество дней в месяце 28—31 31 L Проверка, является ли год високосным 1, если год високосный, иначе 0 0 Y Год с 4 цифрами 2006 2026 y Год с 2 цифрами 06 26 a am или pm am A AM или PM AM g 12-часовой формат без 0 1—12 2 G 24-часовой формат без 0 0—23 2 h 12-часовой формат с 0 01—12 02 H 24-часовой формат c 0 00—23 02 i Минута с нулём 00—59 18 s Секунда с нулём 00—59 42 c ISO 8601 2026-10-16T02:18:42+00:00 r RFC 2822 Fri, 16 Oct 2026 02:18:42 +0000 U UNIX-время 1792117122 Расширение PHP cинтаксиса:
Символ Описание xn Выводит следующий числовой код в ASCII число. Например, на языке хинди {{#time: «H, xnH» }} выведет «०६, 06». xr Выводит следующий числовой код римскими цифрами (только для чисел <3000). Например, {{#time: «Y, xrY» }} выведет «2026, MMXXVI». xx Буква «x» Все другие символы будут выведены без изменений.
- Фраза, заключёная в двойные кавычки, будет выведена без изменений и кавычек. Незакрытые кавычки будут считаться символами.
- {{#time: "Сегодня" l }} → Сегодня пӀаьраска
- {{#time: i's" }} → 20'11"
- Наклонная черта влево работает так же, как и в PHP-функции date(). \H выводит H, \" выводит "Ло:Прояснить.
Формат параметра время идентичен используемому в PHP-функции strtotime(). Это могут быть абсолютные и относительные даты, например «December 11»[t 1] и/или «+10 hours», что может использоваться для перевода временных зон. Если вам нужно перевести в дату метку времени UNIX, поставьте перед ней @.
- {{#time: j F Y | -14 days }} → 2 ардара 2026 (14 дней назад)
- {{#time: H:i | +4 hours }} → 06:18 (UTC+4)
- {{#time: H:i | 8:15 +6 hours }} → 14:15
- {{#time: r | @1483057398 }} → Fri, 30 Dec 2016 00:23:18 +0000
- ↑ Русские даты типа «11 декабря» на данный момент не работают, если очень нужно их обработать, попробуйте шаблон {{Date Converter}}.
#rel2abs
[тоаде чура]Функция #rel2abs преобразует относительный путь ссылки в абсолютный.
{{#rel2abs: путь }} {{#rel2abs: путь | базовый путь }}
Под относительным путём принимается такой, который начинается с символов
/,./или../, а также пути..и..— текущий уровень..— «перейти вверх на один уровень»/foo— «перейти вниз на один уровень в поддиректорию „foo“»
Если базовый путь не указан, будет использован текущий.
{{#rel2abs: ../baz | Обсуждение:Foo/bar }}→ Обсуждение:Foo/baz- Если, находясь на странице «Обсуждение:Foo/bar», вызвать
{{#rel2abs: ../baz }}, результат будет «Обсуждение:Foo/baz». - Если, находясь на странице «Обсуждение:Foo», вызвать
{{#rel2abs: ../baz }}, результат будет «baz». - Если, находясь на странице «Обсуждение:Foo», вызвать
{{#rel2abs: ../../baz }}, результат будет «Ошибка: ошибочная глубина пути: «Обсуждение:Foo/../../baz» (попытка доступа к узлу, находящемуся выше, чем корневой)».
Чтобы не проверять, существует ли искомый путь, можно использовать эту функцию в комбинации с
#ifexist:{{#ifexist: {{#rel2abs: .. }} | «..» существует | «..» не существует }}
Если путь, передаваемый функции в качестве параметра, не идентифицирован как относительный путь, функция вернёт в качестве результата его. Например:
{{#rel2abs: Help:Help }}возвращает «Help:Help».
#titleparts
[тоаде чура]Функция #titleparts возвращает подстроку до нужного слэша. Основной целью является возможность получения страниц всех уровней, для которых данная является подстраницей.
{{#titleparts: название страницы | количество сегментов | начиная с (по умолчанию 1) }}
В случае, когда количество сегментов равно нулю, больше количества уровней статьи или его невозможно преобразовать в число, возвращается название страницы целиком (или с сегмента начиная с до конца, если он указан). Внимание: всегда, когда возвращается первый сегмент строки, он начинается с Заглавной буквы.
{{#titleparts: Ювцар:Foo/bar/baz/quok }}→ Ювцар:Foo/bar/baz/quok{{#titleparts: Ювцар:Foo/bar/baz/quok | 1 }}→ Ювцар:Foo См. также {{ROOTPAGENAME}}.{{#titleparts: Ювцар:Foo/bar/baz/quok | 2 }}→ Ювцар:Foo/bar{{#titleparts: Ювцар:Foo/bar/baz/quok | 2 | 2 }}→ bar/baz{{#titleparts: Ювцар:Foo/bar/baz/quok | | 2 }}→ bar/baz/quok
Можно указывать отрицательные значения параметов: для количества сегментов это обозначает исключение из результата количества сегментов последних частей (всех, если больше их количества), для начиная с обозначает начало вывода с −начиная с сегмента справа.
{{#titleparts: Ювцар:Foo/bar/baz/quok | -1 }}→ Ювцар:Foo/bar/baz Опускает один сегмент с конца строки. См. также {{BASEPAGENAME}}.{{#titleparts: Ювцар:Foo/bar/baz/quok | -4 }}→ Опускает все 4 сегмента с конца строки.{{#titleparts: Ювцар:Foo/bar/baz/quok | -5 }}→ Опускает 5 сегментов с конца строки (больше, чем существует).{{#titleparts: Ювцар:Foo/bar/baz/quok | | -1 }}→ quok Возвращает последний сегмент. См. также {{SUBPAGENAME}}.{{#titleparts: Ювцар:Foo/bar/baz/quok | -1 | 2 }}→ bar/baz Опускает последний сегмент с конца строки и возвращает второй сегмент и следующий.{{#titleparts: Ювцар:Foo/bar/baz/quok | -1 | -2 }}→ baz Начинает копирование с второго сегмента с конца строки и опускает один сегмент с конца строки.
- Если, находясь на странице «Участник: Foo/bar», вызвать
{{#titleparts: {{FULLPAGENAME}} | 1 }}, результат будет «Участник: Foo». - Если, находясь на странице «Участник: Foo/bar», вызвать
{{#titleparts: {{PAGENAME}} | 1 }}, результат будет «Foo».
Строки более 255 символов всегда возвращаются как переданы.
#iferror
[тоаде чура]{{#iferror: выражение | ошибка | удачно }}
Возвращает ошибку, если выражение содержит строку , которая генерируется функциями #expr, #ifexpr, #time, #rel2abs и в некоторых других ситуациях в MediaWiki (такими как глубокая рекурсия). Это самый удобный способ отлавливать неправильный ввод, который должен быть передан некоторым другим функциям парсера. Например:
- {{#iferror: {{#expr: 1+1 }} | неверный ввод | правильное выражение }} → правильное выражение
- {{#iferror: {{#expr: 1+Z }} | неверный ввод | правильное выражение }} → неверный ввод
Последние два параметра необязательны. Если параметр удачно опущен, тогда в случае удачи будет возвращено выражение. Если параметр ошибка также опущен, тогда в случае ошибки не будет выведено ничего, а в случае удачного выполнения будет возвращено выражение.
- {{#iferror: {{#expr: 1+1 }} | неверный ввод}} → 2
- {{#iferror: {{#expr: 1+Z }} | неверный ввод}} → неверный ввод
- {{#iferror: {{#expr: 1+1 }} }} → 2
- {{#iferror: {{#expr: 1+Z }} }} →
Таким образом:
- {{#iferror: викитекст | альтернатива }} значит «вывести викитекст, если он верный, иначе альтернативу».
- {{#iferror: викитекст }} значит «вывести викитекст, если он верный».
- Примечание: эта функциональность замещает баг в старом препроцессоре, позволявший использовать #switch для отлова ошибок в выражениях.
См. также
[тоаде чура]- Википедия:Механизм шаблонов
- Википедия:Шаблоны/Работа со строками
- Википедия:Переменные
- mw:Help:Extension:ParserFunctions — страница, откуда был переведён этот текст
- mw:Help:Magic_words/ru
- mw:Help:Magic_words/inh
История установки расширения
[тоаде чура]Расширение было написано Тимом Старлингом и установлено во всех проектах фонда «Викимедиа» в апреле 2006 года.