«Шаблонами» в MediaWiki называется класс особых страниц, содержимое которых можно вставить в другие страницы. Причём это содержимое считывается при каждой загрузке страницы: изменения в шаблоне проявятся на страницах, их применяющих. Далее описывается их работа.
Страницы шаблонов — полноценные вики-документы, для которых отведено своё пространство имён «Шаблон:». В Википедии их позволено править любому участнику.
Вызывается шаблон пометкой
{{Имя шаблона}}
При отображении страницы на место этого будет помещено содержимое страницы «Шаблон:Имя шаблона». Если её ещё нет, то пометка будет отображена как ссылка на несуществующую статью шаблона. Поэтому, чтобы не озадачивать читателя красной ссылкой подобной Шаблон:POV cehck, удостоверьтесь в существовании вызываемых шаблонов — это делается предпросмотром страницы до сохранения правки.
Если статья Имя шаблона есть в главном пространстве имён, или предварено двоеточием (что означает ссылку на главное пространство имен), то ссылка не будет автоматически направляться в пространство имён «Шаблон:». Таким образом, любую страницу можно использовать как шаблон. Если вызывать так картинку или категорию, то будет подставлена описательная часть картинки и категории соответственно). Таким способом удобно
Как обычно в MediaWiki, имя статьи или шаблона чувствительно к регистру, а пробел эквивалентен подчёркиванию.
Возможно также включение шаблона в шаблон, то есть вызов одного шаблона из другого и (или) из него же самого́.
Переменные шаблона (cм. ниже) вычисляются после вставки шаблона в вызывающую его статью, то есть если в шаблоне содержится подстановка {{PAGENAME}}, то она будет развёрнута в имя вызывающей статьи, а не в имя этого шаблона.
Список ссылок на используемые в тексте страницы шаблоны показывается в окне редактирования статьи, причём показываются все шаблоны, даже если редактируется только раздел документа, который не содержит шаблонов.
Параметры шаблона могут быть поименованными или пронумерованными. Синтаксис использования может быть
{{templatename|parname1=parvalue1|parname2=parvalue2}}, тогда в теле шаблона надо ссылаться на {{{parname1}}}, {{{parname2}}};
{{templatename|parvalue1|parvalue2}}, тогда в теле шаблона нужно использовать {{{1}}}, {{{2}}}.
Лишние (не используемые в теле шаблона) параметры игнорируются.
Имена параметров чувствительны к регистру символов. Пробелы, знаки подчёркивания и вообще все символы, кроме латинских букв (строчных и заглавных), и цифр, и дефиса, в именах параметров не допускаются.
Таким образом, механизм шаблонов выполняет два типа подстановок:
Параметром шаблона может быть ссылка на другую статью. Пусть, например, у нас есть такой шаблон:
Начало {{{1}}} Конец.
и он называется «Шаблон». Тогда его вызов
{{Шаблон| [[Main_Page|Главная страница]]}}
будет развёрнут в
Начало Главная страница Конец.
Если какой-то параметр «someparameter» не задан, то он остается нераскрытым текстом {{{someparameter}}}, что позволит раскрыть его в дальнейшем, если вызвавшая шаблон статья также включается куда-то ещё, где этот параметр задан.
Заметим, между прочим, что вызов {{Шаблон||a}} делает первый параметр определённым, но равным пустой строке. Если, напротив, нужно задать второй параметр, никак не определяя первый, то для этого следует использовать вызов {{Шаблон|2=a}}. Этот синтаксис следует использовать также и в том случае, когда значение параметра содержит знак равенства (например, «a=b»), поскольку вызов {{Шаблон|a=b|c}} не определит параметр «1», зато определит параметр «a», а вот {{Шаблон|1=a=b|2=c}} сделает всё как надо.
Если, наоборот, появление нераскрытого текста не желательно, то можно использовать условное включение параметра в текст шаблона. Параметр, записанный в форме
{{{parameter|альтернативный текст}}}
будет включён в текст шаблона только в том случае, если значение параметра задано. А в противном случае вместо значения параметра появится альтернативный текст. Этот способ уместен в тех обстоятельствах, когда для некоторого параметра шаблона подразумевается определённое значение по умолчанию. Самый простой пример: если некоторый параметр parameter записан внутри шаблона в форме {{{parameter|}}} (то есть если в качестве альтернативного текста используется пустая строка), тогда на его месте не будет вообще ничего выводиться (даже {{{parameter}}}) в том случае, если этот параметр окажется не заданным.
Иногда возникает необходимость переменить в тексте шаблона нечто большее, чем сам параметр, если этот параметр не задан. Для этой цели употребляется специальный условный шаблон {{qif}}, вызываемый следующим образом:
{{qif
|test=проверяемая_переменная_или_параметр
|then=текст для того случая, когда значение test не пустое
|else=текст для того случая, когда значение test пустое
}}
Параметр else не является обязательным, поэтому можно использовать сокращённую форму условного шаблона:
{{qif
|test=проверяемая_переменная_или_параметр
|then=текст для того случая, когда значение test не пустое
}}
Демонстрационный пример употребления:
{{qif
|test={{{sample|}}}
|then=параметр '''sample''' определён!
|else=параметр '''sample''' пуст!
}}
Реальный пример применения {{qif}} вы можете найти в коде шаблона {{Fidonet}}.
Чтобы увидеть «сырое» содержимое шаблона (подстановки параметров и т. д.), нужно смотреть на шаблон в режиме редактирования, поскольку в противном случае некоторые подстановки вроде {{PAGENAME}} могут раскрыться.
Для показа содержимого шаблона (без wiki-интерпретации) можно использовать кодовый «волшебный» префикс «msgnw:». То есть {{stub}} и {{msgnw:stub}} будут показаны как
|
и
| <center>
<table style="background: #D1DCEB; border: 1px solid #aaa; padding: 0.5em; margin-bottom: 3px; font-size: 95%; width: 80%;"> <tr> <td style="padding-right: 4px; padding-left: 4px;">Это незавершённая статья. Вы поможете проекту,<span class="plainlinks"> [{{SERVER}}{{localurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} исправив и дополнив] </span>её.</td> </tr> </table> </center><includeonly>[[Категория:Незавершенные статьи]]</includeonly> |
соответственно.
«Редактирующая» ссылка на каждой странице-статье не позволяет редактировать текст используемого шаблона, а иногда желательно иметь такую ссылку (приглашающую поправить шаблон, например, если шаблон еще не устоялся, или если его содержимое может часто изменяться). Такую ссылку можно «зашить» внутрь самого шаблона, даже более того — сделать шаблоном, который можно использовать внутри других шаблонов. См. шаблон {{edit}}.
Не получится вызывать шаблоны в зависимости от содержимого других шаблонов. Допустим, у нас есть шаблон «tctc» с содержимым «tc», и шаблон «tc» с содержимым «Ура».
Тогда вызов {{{{tctc}}}} даст текст {{{{tctc}}}}, а не «Ура».
Не получится использовать значение раскрытого шаблона при вызове другого шаблона. Зато можно использовать значения переданных переменных, при указании значений переменных для вызываемого шаблона.
Если шаблон содержит код категории, то в указанную категорию помещается не только шаблон, но и все страницы, включающие его, поэтому удобно использовать шаблоны для рубрикации статей.
Но может возникнуть проблема с кэшированием — если поменять категорию у шаблона, то категория у включающих этот шаблон страниц поменяется не сразу, а только через некоторое время, после того как серверы Википедии выполнят необходимые действия. Процесс выполнения можно отследить на странице Special:Statistics — длина очереди заданий отражает количество статей которые ещё не обновились.
Кроме того, категория немедленно меняется у только что отредактированных статей.
Желательно использовать категории включённые в шаблон только для шаблонов предназначенных для пометки статей (типа {{stub}}), и не включать категории в навигационные шаблоны.
Всё, что находится между тегами <noinclude> и </noinclude> будет обрабатываться и показываться только в случае когда шаблон показывается непосредственно, не включенным в другую страницу. Возможные применения:
Тег <includeonly> обладает противоположным действием. Текст между <includeonly> и </includeonly> будет обрабатываться и показываться только тогда когда шаблон включён в статью. Очевидное применение:
Будьте внимательны! Не допускайте пустых строк вокруг конструкций <noinclude> и <includeonly>, так как пустая строка будет интерпретироваться в перенос строки, который будет внесён шаблоном в статью.
Следует отметить, что при этом сохраняется обычная проблема — если включить статью в категорию посредством шаблона, а потом изменить категорию в шаблоне. статьи будут содержаться в старой категории, хотя при их просмотре будет создаваться впечатление что они в новой и статьи будут на самом деле включены в новую категорию только после их редактирования и сохранения.
Правка шаблона автоматически сбрасывает кэширование всех статей, напрямую использующих этот шаблон. Однако в случае с косвенными зависимостями (шаблоны зависящие от параметров и т. п.), внутренний кэш системы не сбрасывается и стандартный «Refresh» браузера может не помочь. В таких случаях используйте «action=purge», т. е. вызывайте URL типа:
[{{SERVER}}{{localurl:{{NAMESPACE}}:{{PAGENAME}}?action=purge}} Очистить кэш страницы]
что отобразится как
Используя «subst:» после двойных фигурных скобок заставляет выполнять подстановку текста шаблона или даже переменной в момент сохранения ссылающейся страницы.
Например «timestamp»:
{{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}, {{subst:CURRENTTIME}} (UTC)
подставится при сохранении страницы:
3 марта 2005, 16:56 (UTC)
в то время, как
{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} (UTC)
каждый раз будет показывать текущее время:
25 май 2012, 08:38 (UTC)
Шаблон:Tls ~~~~ используется для приветствия новых участников.
Когда страница, вызванная для включения, является страницей-перенаправлением, то включается содержимое страницы, на которую указывает перенаправление.
Страница, которая ничего не содержит, кроме включения другой страницы, в общем схожа со страницей-перенаправлением, но имеет и множество различий, например:
Отметим, что если ссылаться (в смысле гиперссылок) на шаблоны, как на обычные статьи, то нельзя передать им параметры (что, в общем, очевидно). Однако, иногда это может быть полезно, например, ссылка на увеличенное изображение.
При просмотре исторических версий статей, содержащих шаблоны и/или картинки, всегда используется текущая версия шаблонов (и картинок), т. е. невозможна автоматическая «абсолютная» реконструкция исторических версий композитных текстов, чтобы также содержались ссылки на соответствующие картинки и шаблоны.