Википедия:Функции парсера: различия между версиями

Содержимое удалено Содержимое добавлено
м оформление
отмена правки 126409703 участника DecabristM (обс.) я вообще не хожу на mediawiki.org. Зачем мне туда ходить?
Метка: отмена
 
(не показано 39 промежуточных версий 19 участников)
Строка 1:
{{shortcut|ВП:ПАРС|ВП:Парсер}}
{{о|расширении для MediaWiki|базовых функциях парсера|mw:Help:Magic words/ru#Функции парсера}}
{{ombox|type=content|text='''Информация о расширениирасширениях на данной странице могла устареть.''' Обновленная и более подробная информация находится на [[mw:Help:Extension:ParserFunctions/ru|странице MediaWiki]].}}
 
Базовый набор функций парсера известен под названием ''[[mw:Help:Magic words/ru|magic words]]'' («волшебные слова», «магические слова»). См. также [[mw:Help:Extension:ParserFunctions/ru]] и [[mw:Extension:StringFunctions]]. Общий синтаксис функций парсера таков:
{{''#функция'': ''аргумент 1'' | ''аргумент 2'' | ''аргумент 3'' ... }}
 
Если необходимо, чтобы значение, выдаваемое парсером, было частью таблицы, необходимо вместо символа вертикальной черты использовать шаблоны-подстановки — {{t|!-}}, {{t|!}}, {{t|!!}}, — которые адекватно воспринимается функциями парсера, и при формировании страницы движком MediaWiki раскрываются в символы, формирующие таблицу — <code>|-</code>, <code>|</code>, <code>||</code>.
 
Для формирования таблицы можно также использовать язык [[HTML]]:
Строка 17:
 
=== #expr ===
{{см. также|mw:Help:Extension:ParserFunctions/ru##expr}}
Функция <tt>#expr</tt> производит математические вычисления над числами или переменными/параметрами, приводимыми к числам. Синтаксис:
 
Строка 83 ⟶ 84 :
|-
! round
| Округляет левый операнд до 1/10указанного вчисла степеницифр правогопосле операндазапятой
| <tt><nowiki>{{#expr: 30 / 7 round 3 }}</nowiki></tt> = {{#expr: 30 / 7 round 3 }}<br>
<tt><nowiki>{{#expr: 30 / 7 round 0 }}</nowiki></tt> = {{#expr: 30 / 7 round 0 }}<br>
Строка 152 ⟶ 153 :
 
=== #if ===
{{см. также|mw:Help:Extension:ParserFunctions/ru##if}}
Функция <tt>#if</tt> («если») служит для создания конструкций вида if-then-else. Её синтаксис таков:
 
<nowiki>{{</nowiki>#if: ''тестовая строка'' | ''текст, если непуста'' | ''текст, если пуста'' <nowiki>}}</nowiki>
 
Если ''тестовая строка'' пуста или состоит только из пробелов, то возвращается ''«текст, если пуста»''; в обратном случае возвращается ''«текст, если непуста»''. Последний параметр может быть опущен — в этом случае при пустой строке будет возвращена пустая строка.
 
Обратите внимание, что <tt>#if</tt> не поддерживает сравнение при помощи «=» и прочие математические операции. Так, <code><nowiki>{{#if: 1 = 2 | да | нет }}</nowiki></code> вернёт «{{#if: 1 = 2 | да | нет }}», так как строка <code>1 = 2</code> непуста. Для сравнения строк используйте <tt>#ifeq</tt>. Для сравнения чисел используйте <tt>#ifexpr</tt>.
 
Содержимое после вертикальных черт воспринимается как написанное с начала строки, поэтому символы «<code>*»</code>, «<code>#</code>, <code>:»</code>, «<code>;»</code> и прочие на первой позиции преобразуются в соответствующие элементы вёрстки. Чтобы этого избежать, ставьте перед ними тег {{tago|nowiki/}} или заменяйте на HTML-сущности {{amp|#42}}, {{amp|#35}}, {{amp|#58}} и {{amp|#59}} соответственно.
 
=== #ifeq ===
{{см. также|mw:Help:Extension:ParserFunctions/ru##ifeq}}
Функция <tt>#ifeq</tt> («if equal», «если равны») сравнивает две строки, возвращая ещё одну строку в зависимости от результата сравнения. Её синтаксис таков:
 
Строка 168 ⟶ 171 :
 
=== #ifexist ===
{{см. также|mw:Help:Extension:ParserFunctions/ru##ifexist}}
Функция <tt>#ifexist</tt> («if exist», «если существует») похожа по синтаксису на <tt>#if</tt>, только вместо условия проверяется существование статьи с указанным заголовком. Проверка выполняется с учётом регистра после приведения проверяемого заголовка к каноническому виду (если в начале стоит строчная буква, то она преобразуется в прописную). Например:
: <tt><nowiki>{{#ifexist: User:Js | Участник есть | Участника нет }}</nowiki></tt> вернёт <tt>{{#ifexist: User:Js | Участник есть | Участника нет }}</tt>, поскольку страница [[User:Js]] существует.
Строка 175 ⟶ 179 :
<nowiki>{{#ifexist}}</nowiki> не работает с относительными путями типа [[/подстраница]].
 
Для пространства имён «Файл» (оно же «File», «Изображение») проверяется наличие только локального файла, но не файла на [[Викисклад]]е. Для проверки наличия доступного файла также и на Викискладе, нужно использовать префикс <nowiki>«MediаMedia:»</nowiki>.
 
Пример (файл [[:Файл:Example.png|Example.png]] загружен только на Викисклад):
Строка 186 ⟶ 190 :
Также работает с параметрами шаблонов.
 
Количество вызовов этой функции на одной странице ограничено. Если страница преодолела этооно ограничениепревышено, онастраница попадает в категорию {{cl|Википедия:Страницы, в которыхсо слишком многобольшим ifexistколичеством вызовов ресурсоёмких функций}}. ЭтоКоличество необходимовызовов каким-либофункции образомна странице необходимо исправитьснизить.
 
=== #ifexpr ===
{{см. также|mw:Help:Extension:ParserFunctions/ru##ifexpr}}
<tt>#ifexpr</tt> вычисляет математическое выражение и возвращает одну из двух строк в зависимости от результата.
 
Строка 196 ⟶ 201 :
 
=== #switch ===
{{см. также|mw:Help:Extension:ParserFunctions/ru##switch}}
<tt>#switch</tt> сравнивает одно значение со многими, возвращая результат, если найдено совпадение. Если совпадение не найдено, то возвращается указанный в конце записи результат по умолчанию (он обязательно должен быть последним). Наличие этого результата необязательно, и в случае отсутствия его и совпадений ничего возвращено не будет.
 
Строка 233 ⟶ 239 :
 
=== #time ===
{{см. также|mw:Help:Extension:ParserFunctions/ru##time}}
<tt>#time</tt> — функция, позволяющая выводить время и дату в заданомзаданном формате. Синтаксис:
<nowiki>{{</nowiki>#time: ''формат'' <nowiki>}}</nowiki>
<nowiki>{{</nowiki>#time: ''формат'' | ''время'' <nowiki>}}</nowiki>
Строка 393 ⟶ 400 :
| {{#time: U }}
|}
Расширение PHP cинтаксисасинтаксиса:
{| cellpadding="6" class="standard"
! Символ
Строка 402 ⟶ 409 :
|--------------
| xr
| Выводит следующий числовой код [[Римские цифры|римскими цифрами]] (только для чисел <3000). Например, <tt><nowiki>{{#time: «Y, xrY» }}</nowiki></tt> выведет {{#time: «Y, xrY» }}.
|--------------
| xx
Строка 408 ⟶ 415 :
|}
Все другие символы будут выведены без изменений.
* Фраза, заключёнаязаключённая в двойные кавычки, будет выведена без изменений и кавычек. Незакрытые кавычки будут считатьсясчитаются символами.
** <tt><nowiki>{{#time: "Сегодня" l }}</nowiki></tt></tt> → {{#time: "Сегодня" l }}
** <tt><nowiki>{{#time: i's" }}</nowiki></tt> → <nowiki>20{{#time: i'11s"</nowiki> }}
* Наклонная черта влево работает так же, как и в PHP-функции [http://ru2.php.net/date date()]. <tt>\H</tt> выводит <tt>H</tt>, <tt>\<nowiki>"</nowiki></tt> выводит <tt><nowiki>"</nowiki></tt>{{прояснить}}.
 
Формат параметра ''время'' идентичен используемому в PHP-функции [http://ru2.php.net/strtotime strtotime()]. Это могут быть абсолютные и относительные даты, например «December 11»<ref group=t>Русские даты типа «11 декабря» на данный момент не работают, если очень нужно их обработать, попробуйте шаблон {{tl|Date Converter}}.</ref> и/или «+10 hours», что может использоваться для перевода временных зон. Если вам нужно перевести в дату метку времени UNIX, поставьте перед ней <tt>@</tt>.
 
* <tt><nowiki>{{#time: j Fxg Y | -14 days }}</nowiki></tt> → {{#time: j Fxg Y | -14 days }} ''(14 дней назад)''
* <tt><nowiki>{{#time: H:i | +4 hours }}</nowiki></tt> → {{#time: H:i | +4 hours }} ''(UTC+4)''
* <tt><nowiki>{{#time: H:i | 8:15 +6 hours }}</nowiki></tt> → {{#time: H:i | 8:15 +6 hours }}
* <tt><nowiki>{{#time: r | @1483057398 }}</nowiki></tt> → {{#time: r | @1483057398 }}
Число римскими цифрами
* <tt><nowiki>{{#time: xrU | 1970-1-1 + 61 second}}</nowiki></tt> → {{#time: xrU | 1970-1-1 + 61 second}}
* <tt><nowiki>{{#time: xrU | @62}}</nowiki></tt> → {{#time: xrU | @62}}
 
==== Примечания ====
<div style="padding-left:1em;"><references group=t/></div>
 
=== #rel2abs ===
{{см. также|mw:Help:Extension:ParserFunctions/ru##rel2abs}}
Функция <tt>#rel2abs</tt> преобразует относительный путь ссылки в абсолютный.
 
Строка 443 ⟶ 456 :
 
Если путь, передаваемый функции в качестве параметра, не идентифицирован как относительный путь, функция вернёт в качестве результата его. Например:
: <code><nowiki>{{#rel2abs: Help:Help }}</nowiki></code> возвращает «{{#rel2abs: Help:Help }}».
 
=== #titleparts ===
{{см. также|mw:Help:Extension:ParserFunctions/ru##titleparts}}
Функция <tt>#titleparts</tt> возвращает подстроку до нужного слэша. Основной целью является возможность получения страниц всех уровней, для которых данная является подстраницей.
 
Строка 457 ⟶ 471 :
: <code><nowiki>{{#titleparts:</nowiki> {{ns:1}}:Foo/<span style="color: blue;">bar/baz/quok</span> <nowiki>| | 2 }}</nowiki></code> → '''{{#titleparts: {{ns:1}}:Foo/bar/baz/quok | | 2 }}'''
 
Можно указывать отрицательные значения параметовпараметров: для ''количества сегментов'' это обозначает исключение из результата ''количества сегментов'' последних частей (всех, если больше их количества), для ''начиная с'' обозначает начало вывода с −''начиная с'' сегмента справа.
: <code><nowiki>{{#titleparts:</nowiki> <span style="color: blue;">{{ns:1}}:Foo/bar/baz</span>/quok <nowiki>| -1 }}</nowiki></code> → '''{{#titleparts: {{ns:1}}:Foo/bar/baz/quok | -1 }}''' {{nbsp}}<small>Опускает один сегмент с конца строки. См. также {{mwmw|BASEPAGENAME}}.</small>
: <code><nowiki>{{#titleparts:</nowiki> {{ns:1}}:Foo/bar/baz/quok <nowiki>| -4 }}</nowiki></code> → '''{{#titleparts: {{ns:1}}:Foo/bar/baz/quok | -4 }} ''' <small>Опускает все 4 сегмента с конца строки.</small>
Строка 466 ⟶ 480 :
 
----
* Если, находясь на странице «Участник: Foo/bar», вызвать <code><nowiki>{{#titleparts: {{FULLPAGENAME}} | 1 }}</nowiki></code>, результат будет «{{#titleparts: {{FULLPAGENAME:Участник: Foo/bar}} | 1 }}».
* Если, находясь на странице «Участник: Foo/bar», вызвать <code><nowiki>{{#titleparts: {{PAGENAME}} | 1 }}</nowiki></code>, результат будет «{{#titleparts: {{PAGENAME:Участник: Foo/bar}} | 1 }}».
 
Строки более 255 символов всегда возвращаются как переданы.
 
=== #iferror ===
{{см. также|mw:Help:Extension:ParserFunctions/ru##iferror}}
<nowiki>{{</nowiki>#iferror: ''выражение'' | ''ошибка'' | ''удачно'' <nowiki>}}</nowiki>
Возвращает ''ошибку'', если ''выражение'' содержит строку <tt><nowiki><strong class="error"></nowiki></tt>, которая генерируется функциями <tt>#expr</tt>, <tt>#ifexpr</tt>, <tt>#time</tt>, <tt>#rel2abs</tt> и в некоторых других ситуациях в MediaWiki (такими как глубокая рекурсия). Это самый удобный способ отлавливать неправильный ввод, который должен быть передан некоторым другим функциям парсера. Например:
Строка 491 ⟶ 506 :
 
См. также: [[rev:29774|r29774]], [[rev:29775|r29775]], [[rev:29877|r29877]].
 
=== #lst ===
{{main|:en:Help:Labeled section transclusion}}
Если вы хотите включить часть страницы <tt>pagename</tt> в другую, то механизм включения отдельных секций позволяет более гибко включать содержимое одних страниц в другие, чем полное включение страниц при помощи <tt><nowiki>{{:pagename}}</nowiki></tt> и {{xtag|noinclude}}. На странице, содержимое которой планируется включить в другую, начало секции помечается {{xtag|section|single|params=begin=''label''}}, а конец секции помечается {{xtag|section|single|params=end=''label''}}. На странице, куда включается секция ставится <tt><nowiki>{{#lst:pagename|label}}</nowiki></tt>.
 
Данный механизм позволяет отметить на включаемой странице несколько секций, причём они могут перекрываться.
<!--== Установка ==
Скачайте указанные ниже файлы и установите их в новую директорию ''ParserFunctions'' в [[m:Mediawiki extensions|директории расширений MediaWiki]].
Строка 516 ⟶ 537 :
* [[Википедия:Шаблоны/Работа со строками]]
* [[Википедия:Переменные]]
* [[mw:Help:Extension:ParserFunctions/ru]]{{ref-enru}} — страница, откуда был переведён этот текст
* [[mw:Help:Magic_words/ru]]{{ref-ru}}
 
== История установки расширения ==