Внимание!!! Все файлы в которых будут меняться настройки обязательно нужно копировать в созданную в корне сервера папку copy.

Новые настройки вступят в силу после рестарта необходимой службы.

Новые настройки, влияние которых на работу сервера в дальнейшем неизвестно, после проведенных работ заменять на исходные (возвращать на старые).

Функции парсера MediaWiki

Материал из Справка по MediaWiki
Перейти к: навигация, поиск

Общий синтаксис функций парсера таков:

{{#функция: аргумент 1 | аргумент 2 | аргумент 3 | … }}

Если необходимо, чтобы значение, выдаваемое парсером, было частью таблицы, необходимо вместо символа вертикальной черты использовать шаблоны-подстановки — Шаблон:Tl, Шаблон:Tl, Шаблон:Tl, — которые адекватно воспринимается функциями парсера, и при формировании страницы движком 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
/ Деление, эквивалент 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

Более подробная документация по операторам функции — en:Help:Calculation.

Как всегда, лучше поставить лишние скобки, чем ломать голову с порядком вычисления.

На выводе логических переменных 0 означает ложь, а 1 — истину.

Например:

{{ #expr: (100 - 32) / 9 * 5 round 0 }}

выдаёт: 38.

Произведено преобразование 100° по Фаренгейту в градусы по Цельсию с округлением до ближайшего целого числа.

#if:

Функция if (Шаблон:Lang-ru) служит для создания конструкций вида if-then-else. Её синтаксис таков:

{{ #if: <условие> | <текст, если условие истинно> | <текст, если условие ложно> }}

Если условие — пустая строка или состоит только из пробелов, считается, что условие не выполнено, и возвращается текст, если условие ложно; если заданное условие истинно, то при его выполнении возвращается текст, если условие истинно. Последний параметр может быть опущен — в этом случае при ложном условии будет возвращена пустая строка.

Обратите внимание, что if не поддерживает сравнение при помощи «=» и прочие математические операции. Так, {{#if: 1 = 2|да|нет}} возвратит «да», так как строка «1 = 2» не пуста. Для сравнения строк используйте ifeq. Для сравнения чисел используйте ifexpr.

#ifeq:

Функция ifeq сравнивает две строки, возвращая ещё одну строку в зависимости от результата сравнения. Её синтаксис таков:

{{ #ifeq: <строка для сравнения 1> | <строка для сравнения 2> | <текст, если равны> | <текст, если не равны> }}

#ifexist:

Функция ifexist похожа по синтаксису на 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 варианта вернут «есть».

Количество вызовов этой функции на одной странице ограничено. Если страница преодолела это ограничение, она попадает в категорию Шаблон:Cl. Это необходимо каким-либо образом исправить.

#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 не сможет правильно сравнить её и значения. Для этого нужно обязательно в значениях (но необязательно в сравниваемой величине) использовать шаблон Шаблон:Tl, который содержит знак равенства:

{{#switch: 1=2
 | 1=2 = raw
 | 1<nowiki>=</nowiki>2 = nowiki
 | 1&#61;2 = html
 | 1{{=}}2 = template
 | default }}html

#time:

#time — функция, позволяющая выводить время и дату в заданом формате. Синтаксис:

{{ #time: format }}

или

{{ #time: format | time }}

или

{{ #time: format | time | language }}

Аргумент time принимает дату в формате гггг-мм-чч, где гггг — год, мм — номер месяца, чч — число месяца. Если аргумент time не задан, то используется текущее время и дата.

Аргумент language принимает код языка по ISO 639-1. Если аргумент language не задан, то время и дата выводятся на русском языке.

Из-за кэширования возможно различие между реальным временем и отображаемым. Для ручного обновления сохраните страницу, не делая никаких изменений, или перейдите по адресу Шаблон:Nc.

Аргумент format подобен используемому в функции PHP date:

Символ Описание Пример Текущее значение
d День месяца с нулём. 04 21
D Краткое название дня недели. Пн Чт
j День месяца без нуля. 4 21
l Полное название дня недели. понедельник четверг
N Номер дня недели ISO 8601 1 (понедельник) — 7 (воскресенье) 4
w Номер дня недели 0 (воскресенье) — 6 (суббота) 4
z Номер дня года (начиная с 0) 0—365 263
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 2017
y Год с 2 цифрами. 06 17
a am или pm am
A AM или PM AM
g 12-часовой формат без 0 1—12 7
G 24-часовой формат без 0 0—23 7
h 12-часовой формат с 0 01—12 07
H 24-часовой формат c 0 00—23 07
i Минута с нулём. 00—59 36
s Секунда с нулём. 00—59 49
c ISO 8601 2017-09-21T07:36:49+00:00
r RFC 2822 Thu, 21 Sep 2017 07:36:49 +0000
U UNIX-время 1505979409

Расширение PHP cинтаксиса:

Символ Описание
xn Выводит следующий числовой код в ASCII число. Например, на языке хинди {{ #time:«H, xnH»}} выведет „०६, 06“.
xr Выводит следующий числовой код римскими цифрами (только для чисел <3000). Например, {{ #time:«Y, xrY»}} выведет «2017, MMXVII».
xx Буква „x“

Все другие символы будут выведены без изменений.

  • Фраза, заключёная в двойные кавычки, будет выведена без изменений и кавычек. Незакрытые кавычки будут считаться символами.
    • {{ #time: "Сегодня" l}}</tt> → Сегодня вторник
    • {{ #time:i’s"}} → 20’11»
  • Наклонная черта влево работает так же как и в PHP date(). \H выводит H, \" выводит ".Шаблон:Прояснить

Формат параметра time идентичен используемому в PHP strtotime(). Это могут быть абсолютные и относительные даты, например «December 11»[t 1] и/или «+10 hours», что может использоваться для перевода временных зон.

  • {{ #time: j F Y | -14 days }} → 7 сентябрь 2017 (14 дней назад)
  • {{ #time: H:i | +4 hours }} → 11:36 (UTC+4)
  • {{ #time: H:i | 8:15 +6 hours }} → 14:15
  1. Русские даты типа «11 декабря» на данный момент не работают, если очень нужно их обработать, попробуйте шаблон Шаблон:Tl.

#rel2abs:

Функция #rel2abs преобразует относительный путь ссылки в абсолютный.

{{ #rel2abs: | path }}

Под относительным путём принимается такой, который начинается с символов '/', './' или '../', а также просто '..' или '.'.

Пример:

  • Если находиться на стр. Help:Foo/bar и вызвать {{#rel2abs: ../baz}}, результатом должно стать Help:Foo/baz
  • Если находиться на стр. Help:Foo и вызвать {{#rel2abs: ../baz}}, результатом должно стать baz
  • Если находиться на стр. Help:Foo и вызвать {{#rel2abs: ../../baz}}, результатом должно стать Error: Invalid depth in path: "Help:Foo/../../baz" (tried to access a node above the root node)"

Чтобы не проверять, существует ли искомый путь, можно использоват эту функцию в комбинации с #ifexist:

{{#ifexist: {{#rel2abs: ..}} | '..' exist | '..' does not exist}}

Если путь, передаваемый на вход функции в качестве параметра, не идентифицирован как относительный путь, функция его вернёт в качестве результата. Например:

{{#rel2abs: Help:Help}} возвращает 'Help:Help'

#titleparts:

Функция #titleparts возвращает подстроку до нужного слэша. Основной целью является возможность получения страниц всех уровней, для которых данная является подстраницей.

{{ #titleparts: Название | КолСегментов | НачатьС (по умолчанию 1) }}

В случае, когда параметр КолСегментов равен нулю, больше количества уровней статьи или его невозможно преобразовать в число, возвращается Название целиком (или с сегмента НачатьС до конца, если он указан). Внимание: всегда, когда возвращается первый сегмент строки, он начинается с Заглавной буквы.

Можно указывать отрицательные значения параметов: для КолСегментов это обозначает исключение из результата -КолСегментов последних частей (всех, если больше их количества), для НачатьС обозначает начало вывода с -НачатьС сегмента справа.

Пример:

  • {{#titleparts:Статья/foo/bar|1}} вернёт результат результат Статья
  • {{#titleparts:Статья/foo/bar|2}} вернёт результат результат Статья/foo
  • {{#titleparts:Статья/foo/bar|1|2}} вернёт результат результат foo
  • Если находиться на стр. Участник: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:викитекст}} значит «вывести викитекст, если он верный».
Примечание: эта функциональность замещает баг в старом препроцессоре, позволявший использовать #switch для отлова ошибок в выражениях.

См. также: r29774, r29775, r29877.

История установки расширения

Расширение было написано Тимом Старлингом и установлено во всех проектах фонда «Викимедиа» в апреле 2006 года.