{{safesubst: p {{safesubst: #if {{{1}}}: {{{2}}} | 1 | 2}} | {{{3}}} |}}
Этот шаблон используется на более чем 128 000 страницах . Чтобы избежать серьезных сбоев и нагрузки на сервер, любые изменения следует тестировать на подстраницах / sandbox или / testcases шаблона или на собственной подстранице пользователя . Протестированные изменения могут быть добавлены на эту страницу одним редактированием. Обсудите изменения на странице обсуждения, прежде чем внедрять их. Счетчик включений обновляется автоматически ( см. Документацию ). |
С помощью этого шаблона в анализаторе функция по ParserFunctions коллекции с именами , начинающихся с «#if» может использоваться таким образом, чтобы они не отогнать пространства и новую строку из «тогда» и «еще» части. Пробелы по-прежнему не влияют на результат состояния. Параметр 1 выбирает тип if как "eq", "expr", "exist" или "error" (для #iferror) или пустой "||" для простого if-there (для #if). Шаблон может быть многократно вложен в 6 или 7 уровней, один внутри другого, потому что самый внешний завершается перед запуском внутренних уровней then / else.
Этот шаблон можно заменить, если выражение или сравнение не изменится. Функционально знак пробела хранится внутри как простой пробел. Обратите внимание, что во многих случаях может использоваться пустой тег nowiki ("<nowiki />") без шаблона: If , чтобы разрешить пробел (например, "<nowiki /> xx") где угодно, но внутреннее хранилище помещает 43-символьный маркер для "<nowiki />" в длине строки. Однако для тега nowiki нет дополнительной глубины раскрытия, например, в конце пробела "zz <nowiki />".
использование
Где p реализовано в подтверждение утверждения, а q реализовано в отрицании утверждения
{{if||x| p | q }}
дает "р". Обратите внимание на пару вертикальных полосок, окружающих пустой первый параметр.
{{if|expr|2<3| p | q }}
дает "п"{{if|eq| u |u| p | q }}
дает "п"{{if|exist| Help:Link | p | q }}
дает "п"{{if|error|{{#expr:x}}| p | q }}
дает "п"
Сравнивать:
{{#if:x| p | q }}
дает "п"{{#ifexpr:2<3| p | q }}
дает "п"{{#ifeq: u |u| p | q }}
дает "п"{{#ifexist: Help:Link | p | q }}
дает "п"{{#iferror:{{#expr:x}}| p | q }}
дает "п"
Например, с шаблоном с именем Template: имя шаблона, содержащего код {{#ifeq: {{{parameter}}} |u| p | q }}
, ввод кода {{{Template name|parameter=u}}}
в статью дает «p», но {{{Template name|parameter=v}}}
дает «q».
Текст предложения then или else обрабатывается и раскрывается только при срабатывании триггера. Следовательно, любые используемые шаблоны раскрываются только после сопоставления предложения then или else, в противном случае они пропускаются как просто парные фигурные скобки "{{" с "}}".
Отступ
Делая отступ в разметке, необходимо соблюдать осторожность, чтобы избежать лишних символов новой строки при отступе "}}" на следующей строке. Дополнительная прутковая труба "|" может быть добавлен после предложения else, чтобы завершить этот текст, и позволить "}}" быть помещенным в любом месте без добавления новой строки в предложение else. Например:
{{если | {{{1 |}}} | то найден параметр 1 | иначе параметр 1 отсутствует | ← лишний "|" заканчивается else-clause}}
Когда предложение else смещается к следующей строке, добавляется новая строка (CR / LF):
{{если | {{{1 |}}} | затем нашел параметр 1 ← здесь дополнительная новая строка | иначе без параметра 1 |}}
Чтобы сделать отступ для else-clause, разделите комментарий HTML-формы как " <!--
" со следующей строкой как " -->|else...
". Если каждое предложение then и else не будет тщательно протестировано, чтобы следить за дополнительными символами новой строки, то результаты, скорее всего, приведут к разрыву строк с дополнительными разрывами строк для каждой новой строки. По этой причине глобальное редактирование с простым поиском и заменой " {#if:
" на " {if||
", вероятно, оставит проблемы с новой строкой, где бы исходная разметка не была перенесена с отступом либо предложения else или "}}" каждой структуры if . Отступ в предложении then не проблема.
Соображения производительности
Поскольку Template: If должен подготовить параметры для #if, #ifeq, #ifexpr,
(и т. Д.), При его использовании возникают небольшие накладные расходы. Он был рассчитан на работу со скоростью 290 экземпляров в секунду, поэтому для 29 сравнений потребуется всего 0,1 с, десятая доля секунды для выполнения 29 сравнений. Каждое вложенное использование добавляет 5 уровней к глубине раскрытия шаблона, так что 7 вложенных шаблонов if будут использовать 35 уровней (5 * 7) из 41-уровневого лимита .
Используя Р- , если синтаксис: Аналогичное если-структура может быть кодирован без шаблона: если , при использовании и шаблонов в «Р-если» структуры. Шаблон: P1 всегда возвращает параметр 1, а P2 возвращает 2-й. Итак, сравнение 4 и 3 может быть закодировано с использованием синтаксической формы P-if:{{P1}}
{{P2}}
- Пример
#ifexpr
:"{{P{{#ifexpr: 4 > 3|1|2}}| then 4 greater| else 4 lower}}"
- Результат для
#ifexpr
: «затем на 4 больше» ← сравнение произведено {{P1}}.
- Пример
Глубина раскрытия P-if составляет всего 4 уровня, но вложение then-clause или else-clause может быть более запутанным, чем использование вложенных уровней Template: if.
- Пример
#if
:"{{P{{#if:{{{2|x}}}|1|2}}| then {2} set| else {2} empty}}"
- Результат для
#if
: "else {2} empty" ← вызванное сравнение {{P2}}.
- Пример
Смотрите также
- m: Шаблон: Если
- Шаблон: Ifnotempty - для простоты и уменьшения ограничений, связанных с ограничением глубины раскрытия, это отдельный шаблон, соответствующий только #if.
- Шаблон: Switch , для результата по умолчанию
- Справка: условные выражения