Базовый набор функций парсера известен под названием magic words («волшебные слова», «магические слова»).
Информация о расширении на данной странице могла устареть. Обновленная и более подробная информация находится на странице MediaWiki. |
См. также 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 }} = 6 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 Округляет левый операнд до 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.
Содержимое после вертикальных черт воспринимается как написанное с начала строки, поэтому символы «*», «:», «;» и прочие на первой позиции преобразуются в соответствующие элементы вёрстки. Чтобы этого избежать, ставьте перед ними тег
или заменяйте на 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
= 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 27 D Краткое название дня недели Пн шоатта j День месяца без нуля 4 27 l Полное название дня недели понедельник шоатта N Номер дня недели ISO 8601 1 (понедельник) — 7 (воскресенье) 6 w Номер дня недели 0 (воскресенье) — 6 (суббота) 6 z Номер дня года (начиная с 0) 0—365 117 W Номер недели ISO 8601 17 F Полное название месяца в именительном падеже январь бекарга xg Полное название месяца в родительном падеже января бекарга m Номер месяца с нулём 01—12 04 M Краткое название месяца сен бекарга n Номер месяца без нуля 1—12 4 t Количество дней в месяце 28—31 30 L Проверка, является ли год високосным 1, если год високосный, иначе 0 1 Y Год с 4 цифрами 2006 2024 y Год с 2 цифрами 06 24 a am или pm pm A AM или PM PM g 12-часовой формат без 0 1—12 6 G 24-часовой формат без 0 0—23 18 h 12-часовой формат с 0 01—12 06 H 24-часовой формат c 0 00—23 18 i Минута с нулём 00—59 13 s Секунда с нулём 00—59 46 c ISO 8601 2024-04-27T18:13:46+00:00 r RFC 2822 Sat, 27 Apr 2024 18:13:46 +0000 U UNIX-время 1714241626
Расширение PHP cинтаксиса:
Символ Описание xn Выводит следующий числовой код в ASCII число. Например, на языке хинди {{#time: «H, xnH» }} выведет «०६, 06». xr Выводит следующий числовой код римскими цифрами (только для чисел <3000). Например, {{#time: «Y, xrY» }} выведет «2024, MMXXIV». xx Буква «x»
Все другие символы будут выведены без изменений.
- Фраза, заключёная в двойные кавычки, будет выведена без изменений и кавычек. Незакрытые кавычки будут считаться символами.
- {{#time: "Сегодня" l }} → Сегодня шоатта
- {{#time: i's" }} → 20'11"
- Наклонная черта влево работает так же, как и в PHP-функции date(). \H выводит H, \" выводит "Ло:Прояснить.
Формат параметра время идентичен используемому в PHP-функции strtotime(). Это могут быть абсолютные и относительные даты, например «December 11» и/или «+10 hours», что может использоваться для перевода временных зон. Если вам нужно перевести в дату метку времени UNIX, поставьте перед ней @.
- {{#time: j F Y | -14 days }} → 13 бекарга 2024 (14 дней назад)
- {{#time: H:i | +4 hours }} → 22:13 (UTC+4)
- {{#time: H:i | 8:15 +6 hours }} → 14:15
- {{#time: r | @1483057398 }} → Fri, 30 Dec 2016 00:23:18 +0000
#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 года.
This article uses material from the Wikipedia ГӀалгӀай article Википеди:Парсера функцеш, which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0"); additional terms may apply (view authors). Чударá тIакхоачилга CC BY-SA 4.0 яхача лицензе бокъонашца да, нагахьа санна кхыдар белгалдаь деце. Images, videos and audio are available under their respective licenses.
®Wikipedia is a registered trademark of the Wiki Foundation, Inc. Wiki ГӀалгӀай (DUHOCTRUNGQUOC.VN) is an independent company and has no affiliation with Wiki Foundation.
Tags:
парсера Функцеш Функциипарсера Функцеш См. такжепарсера Функцеш История установки расширенияпарсера Функцешmw:Extension:StringFunctionsmw:Help:Extension:ParserFunctionsmw:Help:Magic words/ru🔥 Trending searches on Wiki ГӀалгӀай:
XX бӀаьшуШолжа-ГӀалаЯндареЧахканаькъан Идриса СаӀидРоссе империСаькура 22Села 12ПилСердало6 Мяцхали1991 шуХамхой Элмарзий АхьмадБайсаранаькъан Муртаза ИдрисГӀалгӀай ханоргЛомСаькура 3ПардашӀаламАгIой буттМалхбузера оакафордБисмалДукха метташ хиларМадданара суратВай замаВьетнам1995 шуХиме элементий мура системаЙоазонхо1758 шуДикача уйлаца пайда эцарФайтонГренландское мореАхмед ДидатГӀазакхстане1905 шуОсканаькъан Сосаркъий СулумбикБаьцамеа 10ИталиГӀалгӀайчен дийнатий дуне29 июняАпрель2009 шуМ (кириллица)Эрсече хинна бӀорахой тӀом1937 шуМихий 17Мехках бахар (йиш)НайробиМарацБирналЛом ПаччахьГӀалгӀайчен географи🡆 More