Меню
Главная
Случайная статья
Настройки
|
Базовый набор функций парсера известен под названием magic words («волшебные слова», «магические слова»). См. также mw:Help:Extension:ParserFunctions/ru и Module:String. Общий синтаксис функций парсера таков:
{{#функция: аргумент 1 | аргумент 2 | аргумент 3 ... }}
Если необходимо, чтобы значение, выдаваемое парсером, было частью таблицы, необходимо вместо символа вертикальной черты использовать шаблоны-подстановки — {{!-}}, {{!}}, {{!!}}, — которые адекватно воспринимается функциями парсера, и при формировании страницы движком MediaWiki раскрываются в символы, формирующие таблицу — |- , | , || .
Для формирования таблицы можно также использовать язык HTML:
<table></table> — аналогично {|- и -|} ;
<tr> — начинает строку;
<td> — создает ячейку в строке…
Содержание
Функции
#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
|
/
|
Деление (целочисленного деления нет)
|
{{#expr: 30 / 7 }} = 4.2857142857143
{{#expr: 5 div 2 * 2 + 5 mod 2 }} = 6
|
div
|
^
|
Возведение в степень
|
{{#expr: 3 ^ 2 }} = 9
|
mod
|
Остаток от деления, получается делением операндов, у которых отброшены дробные части (обратите внимание, что div и mod работают не как в обычных языках программирования)
|
{{#expr: 30 mod 7 }} = 2
{{#expr: -8 mod -3 }} = -2
{{#expr: -8 mod +3 }} = -2
{{#expr: 8 mod 2.7 }} = 0
{{#expr: 8 mod 3.2 }} = 2
{{#expr: 8.9 mod 3 }} = 2
|
+
|
Сложение
|
{{#expr: 30 + 7 }} = 37
|
-
|
Вычитание
|
{{#expr: 30 - 7 }} = 23
|
round
|
Округляет левый операнд до указанного числа цифр после запятой
|
{{#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-сущности * , # , : и ; соответственно.
#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», «Изображение») проверяется наличие только локального файла, но не файла на Викискладе. Для проверки наличия доступного файла также и на Викискладе, нужно использовать префикс «Media:».
Пример (файл Example.png загружен только на Викисклад):
{{#ifexist: Файл:Example.png | есть | нет }} вернёт нет
{{#ifexist: Изображение:Example.png | есть | нет }} вернёт нет
{{#ifexist: Media:Example.png | есть | нет }} вернёт есть
Если была создана локальная страница описания файла с Викисклада, все 3 варианта вернут «есть».
Также работает с параметрами шаблонов.
Количество вызовов этой функции на одной странице ограничено. Если оно превышено, страница попадает в категорию Википедия:Страницы со слишком большим количеством вызовов ресурсоёмких функций. Количество вызовов функции на странице необходимо снизить.
#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 не сможет правильно сравнить её и значения. Для этого нужно обязательно в значениях (но необязательно в сравниваемой величине) использовать шаблон {{=}}, который содержит знак равенства, или код = :
{{#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
|
Краткое название дня недели
|
Пн
|
вт
|
j
|
День месяца без нуля
|
4
|
16
|
l
|
Полное название дня недели
|
понедельник
|
вторник
|
N
|
Номер дня недели ISO 8601
|
1 (понедельник) — 7 (воскресенье)
|
2
|
w
|
Номер дня недели
|
0 (воскресенье) — 6 (суббота)
|
2
|
z
|
Номер дня года (начиная с 0)
|
0—365
|
258
|
W
|
Номер недели ISO 8601
|
|
38
|
F
|
Полное название месяца в именительном падеже
|
январь
|
сентябрь
|
xg
|
Полное название месяца в родительном падеже
|
января
|
сентября
|
m
|
Номер месяца с нулём
|
01—12
|
09
|
M
|
Краткое название месяца
|
сен
|
сен
|
n
|
Номер месяца без нуля
|
1—12
|
9
|
t
|
Количество дней в месяце
|
28—31
|
30
|
L
|
Проверка, является ли год високосным
|
1, если год високосный, иначе 0
|
0
|
Y
|
Год с 4 цифрами
|
2006
|
2025
|
y
|
Год с 2 цифрами
|
06
|
25
|
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
|
04
|
s
|
Секунда с нулём
|
00—59
|
18
|
c
|
ISO 8601
|
|
2025-09-16T02:04:18+00:00
|
r
|
RFC 2822
|
|
Tue, 16 Sep 2025 02:04:18 +0000
|
U
|
UNIX-время
|
|
1757988258
|
Расширение PHP синтаксиса:
Символ
|
Описание
|
xn
|
Выводит следующий числовой код в ASCII число. Например, на языке хинди {{#time: «H, xnH» }} выведет «, 06».
|
xr
|
Выводит следующий числовой код римскими цифрами (только для чисел <3000). Например, {{#time: «Y, xrY» }} выведет «2025, MMXXV».
|
xx
|
Буква «x»
|
Все другие символы будут выведены без изменений.
- Фраза, заключённая в двойные кавычки, будет выведена без изменений и кавычек. Незакрытые кавычки считаются символами.
{{#time: "Сегодня" l }} Сегодня вторник
{{#time: i's" }} 04'18"
- Наклонная черта влево работает так же, как и в PHP-функции date().
\H выводит H , \" выводит " [прояснить].
Формат параметра время идентичен используемому в PHP-функции strtotime(). Это могут быть абсолютные и относительные даты, например «December 11»[t 1] и/или «+10 hours», что может использоваться для перевода временных зон. Если вам нужно перевести в дату метку времени UNIX, поставьте перед ней @ .
{{#time: j xg Y | -14 days }} 2 сентября 2025 (14 дней назад)
{{#time: H:i | +4 hours }} 06:04 (UTC+4)
{{#time: H:i | 8:15 +6 hours }} 14:15
{{#time: r | @1483057398 }} Fri, 30 Dec 2016 00:23:18 +0000
Число римскими цифрами
{{#time: xrU | 1970-1-1 + 61 second}} LXI
{{#time: xrU | @62}} LXII
- Русские даты типа «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: выражение | ошибка | удачно }}
Возвращает ошибку, если выражение содержит строку <strong class="error"> , которая генерируется функциями #expr , #ifexpr , #time , #rel2abs и в некоторых других ситуациях в MediaWiki (такими как глубокая рекурсия). Это самый удобный способ отлавливать неправильный ввод, который должен быть передан некоторым другим функциям парсера. Например:
{{#iferror: {{#expr: 1+1 }} | неверный ввод | правильное выражение }} правильное выражение
{{#iferror: {{#expr: 1+Z }} | неверный ввод | правильное выражение }} неверный ввод
Последние два параметра необязательны. Если параметр удачно опущен, тогда в случае удачи будет возвращено выражение. Если параметр ошибка также опущен, тогда в случае ошибки не будет выведено ничего, а в случае удачного выполнения будет возвращено выражение.
{{#iferror: {{#expr: 1+1 }} | неверный ввод}} 2
{{#iferror: {{#expr: 1+Z }} | неверный ввод}} неверный ввод
{{#iferror: {{#expr: 1+1 }} }} 2
{{#iferror: {{#expr: 1+Z }} }}
Таким образом:
{{#iferror: викитекст | альтернатива }} значит «вывести викитекст, если он верный, иначе альтернативу».
{{#iferror: викитекст }} значит «вывести викитекст, если он верный».
См. также: r29774, r29775, r29877.
#lst
Если вы хотите включить часть страницы pagename в другую, то механизм включения отдельных секций позволяет более гибко включать содержимое одних страниц в другие, чем полное включение страниц при помощи {{:pagename}} и <noinclude> . На странице, содержимое которой планируется включить в другую, начало секции помечается <section begin=label /> , а конец секции помечается <section end=label /> . На странице, куда включается секция ставится {{#lst:pagename|label}} .
Данный механизм позволяет отметить на включаемой странице несколько секций, причём они могут перекрываться.
См. также
История установки расширения
Расширение было написано Тимом Старлингом и установлено во всех проектах фонда «Викимедиа» в апреле 2006 года.
|
|