stringtranslate.com

Помощь:Меташаблонирование

В контексте Википедии меташаблоны включают использование шаблонов в качестве основы для генерации других шаблонов. Некоторые меташаблоны работают как любой другой шаблон и транспонируются . Другие генерируют вики-разметку на лету; это макро-меташаблоны, и они заменяются . Меташаблоны обеспечивают стандартизированную шаблонизацию, благодаря чему многие шаблоны могут использовать общий набор компонентов и форматов.

Макро-меташаблоны несут обычные недостатки подстановки , но они также используют два сильных момента: подстановка в конечном итоге более эффективна и позволяет динамически генерировать вики-разметку. Это делает ее пригодной для более сложных систем, чем те, которые созданы с помощью трансклюзии.

Замена

Существует два префикса подстановки: subst:и safesubst:. Разница проявляется, когда шаблон транспонируется вместо подстановки; в таком случае subst:шаблоны будут печатать текст как есть, без оценки, в то время как safesubst:шаблоны будут транспонироваться.

Замена будет переоценена, когда результирующий шаблон будет включен, в отличие от трансклюзии. Это делает его полезным для шаблонизации макросов.

Пузыристый

Пузыри подстановки . Префикс safesubst:может вести себя как включение и подстановка , в зависимости от того, какой вид использования шаблона применяется к шаблону с wikitext safesubst:. Например, если Template X1 содержит wikitext {{safesubst:X2}}, то произойдет следующее:

Всплывание замен продолжается по цепочке замен до тех пор, пока не будет достигнута трансклюзия, после чего используются только трансклюзии.

Шаблоны маркировки, предназначенные для замены

Шаблоны, предназначенные исключительно для замены, должны иметь в верхней части своих страниц документации.{{subst only}}

Чтобы другие пользователи могли научиться использовать замещенные шаблоны, меташаблоны верхнего уровня, которые будут появляться в обычных шаблонах (а не в других меташаблонах), должны отмечать свое присутствие комментарием. Этот комментарий обычно идет в конце шаблона и просто содержит ссылку на замещенный шаблон:

... <!------ Заменено из [[Шаблон:Пример]].----> </includeonly><noinclude>...

Отсроченная оценка

Процесс генерации текста во время первой замены, которая будет оценена в будущих включениях/заменах, называется отложенной оценкой . Шаблоны используются для формирования цепочки замен и включений. Отложенная оценка обычно требует, чтобы все, кроме последнего включения в цепочке, были заменой.

Отложенная оценка может быть достигнута с помощью шаблона путем печати текста, который будет оценен как вики-разметка другим шаблоном. Например, < и > печатаются как есть, когда они по отдельности, но вместе они могут использоваться для формирования тегов. Если шаблон хочет сформировать тег при замене, он может использовать форму {{{|<}}}example/{{{|>}}}. Угловые скобки заключены в отдельные блоки вики-разметки, поэтому они не объединяются. Поскольку «пустое» имя параметра всегда не определено, угловые скобки всегда будут печататься как резервные значения, и результирующий текст будет <example/>.

HTML-сущности

(X)HTML-сущности, такие как &#124;(|), не будут переведены во время подстановки, поэтому они никогда не будут оценены. Они полезны только для предотвращения оценки текста вообще.

Неопределенные параметры по умолчанию

Параметры могут иметь значения по умолчанию, если они не определены:{{{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 .

Смотрите также