В контексте Википедии меташаблоны включают использование шаблонов в качестве основы для генерации других шаблонов. Некоторые меташаблоны работают как любой другой шаблон и транспонируются . Другие генерируют вики-разметку на лету; это макро-меташаблоны, и они заменяются . Меташаблоны обеспечивают стандартизированную шаблонизацию, благодаря чему многие шаблоны могут использовать общий набор компонентов и форматов.
Макро-меташаблоны несут обычные недостатки подстановки , но они также используют два сильных момента: подстановка в конечном итоге более эффективна и позволяет динамически генерировать вики-разметку. Это делает ее пригодной для более сложных систем, чем те, которые созданы с помощью трансклюзии.
Существует два префикса подстановки: subst:
и safesubst:
. Разница проявляется, когда шаблон транспонируется вместо подстановки; в таком случае subst:
шаблоны будут печатать текст как есть, без оценки, в то время как safesubst:
шаблоны будут транспонироваться.
Замена будет переоценена, когда результирующий шаблон будет включен, в отличие от трансклюзии. Это делает его полезным для шаблонизации макросов.
Пузыри подстановки . Префикс safesubst:
может вести себя как включение и подстановка , в зависимости от того, какой вид использования шаблона применяется к шаблону с wikitext safesubst:
. Например, если Template X1 содержит wikitext {{safesubst:X2}}
, то произойдет следующее:
{{safesubst:X2}}
будет вести себя как {{X2}}
(включение). subst:
не будет оцениваться.{{safesubst:X2}}
будет вести себя как {{subst:X2}}
(подстановка). subst:
также будет заменять, т.е. «подниматься» на страницу, использующую Шаблон X1.Всплывание замен продолжается по цепочке замен до тех пор, пока не будет достигнута трансклюзия, после чего используются только трансклюзии.
Шаблоны, предназначенные исключительно для замены, должны иметь в верхней части своих страниц документации.{{subst only}}
Чтобы другие пользователи могли научиться использовать замещенные шаблоны, меташаблоны верхнего уровня, которые будут появляться в обычных шаблонах (а не в других меташаблонах), должны отмечать свое присутствие комментарием. Этот комментарий обычно идет в конце шаблона и просто содержит ссылку на замещенный шаблон:
... <!------ Заменено из [[Шаблон:Пример]].----> </includeonly><noinclude>...
Процесс генерации текста во время первой замены, которая будет оценена в будущих включениях/заменах, называется отложенной оценкой . Шаблоны используются для формирования цепочки замен и включений. Отложенная оценка обычно требует, чтобы все, кроме последнего включения в цепочке, были заменой.
Отложенная оценка может быть достигнута с помощью шаблона путем печати текста, который будет оценен как вики-разметка другим шаблоном. Например, < и > печатаются как есть, когда они по отдельности, но вместе они могут использоваться для формирования тегов. Если шаблон хочет сформировать тег при замене, он может использовать форму {{{|<}}}example/{{{|>}}}
. Угловые скобки заключены в отдельные блоки вики-разметки, поэтому они не объединяются. Поскольку «пустое» имя параметра всегда не определено, угловые скобки всегда будут печататься как резервные значения, и результирующий текст будет <example/>
.
(X)HTML-сущности, такие как |
(|), не будут переведены во время подстановки, поэтому они никогда не будут оценены. Они полезны только для предотвращения оценки текста вообще.
Параметры могут иметь значения по умолчанию, если они не определены:{{{parameter-name|default-value}}}
Неопределенные параметры по умолчанию полезны для экранирования текста, который в противном случае был бы оценен. Например, чтобы разбить тег, который должен печататься как текст:
{{{|<}}}пример/{{{|>}}}
После первой замены:
<пример/>
Дальнейшие включения будут оценивать тег.
Параметры обрабатываются до подстановки, поэтому их также можно использовать для условной подстановки. Например, для подстановки только в том случае, если nosubst
параметр не определен:
{{{{{nosubst|subst:}}}пример}}
Фигурные скобки разделяют угловые скобки, чтобы предотвратить формирование тега, поэтому самый простой способ экранирования тегов — это неопределенные параметры по умолчанию. Это не имеет накладных расходов, как вызов шаблона. Пример:
{{{|<}}}пример/{{{|>}}}
После первой замены:
<пример/>
Теги можно экранировать так же, как и фигурные скобки. В качестве альтернативы можно использовать шаблон, хотя это менее эффективно. Результат тот же, что и в предыдущем примере:{{lessthan}}
<includeonly><</includeonly>пример/<includeonly>></includeonly>{{lessthan}}пример/>
Обычно это необходимо только для тегов includeonly
, noinclude
, и nowiki
. В таком случае предпочтительнее использовать шаблоны , , и соответственно:{{includeonly}}
{{noinclude}}
{{nowiki}}
{{includeonly|{{example}}}}
После первой замены:
<includeonly>{{пример}}</includeonly>
Дальнейшие трансляции и замены:
Фигурные скобки, если они разделены <includeonly>...</includeonly>
тегами, будут выведены как есть. Обратите внимание, что эти три тега <includeonly>...</includeonly>
, <noinclude>...</noinclude>
и <nowiki>...</nowiki>
не могут быть вложены друг в друга, поэтому этот трюк можно использовать только в коде верхнего уровня. <nowiki>...</nowiki>
теги не будут работать, так как они не будут удалены процессом подстановки. Существует несколько возможных комбинаций:
<includeonly>{{</includeonly>пример<includeonly>}}</includeonly>{{<includeonly>пример</includeonly>}}{{<includeonly/>пример<includeonly/>}}
После первой замены каждый производит:
{{пример}}
Дальнейшие трансляции и замены:
Менее эффективным методом является использование меташаблонов, которые печатают скобки. В отличие от <includeonly>...</includeonly>
разделения тегов, меташаблоны будут работать внутри другого блока вики-разметки, например, внутри аргумента другого шаблона. Существуют универсальные меташаблоны, использующие скобки вместо скобок. Это даст результат, идентичный результату предыдущего примера:
{{((}}пример{{))}}
Другие меташаблоны для создания подобных комбинаций:
{{(}}
производит{
{{)}}
производит}
{{((}}
производит{{
{{))}}
производит}}
{{(((}}
производит{{{
{{)))}}
производит}}}
См. также Категория:Шаблоны пространств имен шаблонов .
Шаблон {{ braces }} может создать, например, следующее:
{{braces|Templatename|item1|item2|...|item8}}
→ {{ИмяШаблона | item1 | item2 | ... | item8}}{{braces|code=on|Templatename|item1|item2|...|item8}}
→ {{Templatename | item1 | item2 | ... | item8}}
Более подробную информацию см. в разделе Шаблон:Брекеты .
Эти символы и последовательности часто необходимо экранировать при написании шаблона, но они должны оцениваться будущими шаблонами. Также см. § Фигурные скобки выше. Разрывы строк отображаются как \n .
{{!}}
производит|
{{!!}}
производит||
{{!(}}
производит[
{{!)}}
производит]
{{!((}}
производит[[
{{))!}}
производит]]
{{=}}
производит=
{{!-}}
производит|-
{{-!-}}
производит \n\n|-
{{s-start}}
создает начало центрированной таблицы; подробности см. в исходном коде s-start.{{!)}}
{{s-end}}
|}
{{end}}
также производит |}
, и в частности как конечные разделители таблицы, которая начинается с{|
{{lessthan}}
производит<