Википедия:Механизм шаблонов
Шаблон:Shortcut «Шаблонами» в MediaWiki (программном обеспечении Википедии) называется класс особых страниц, содержимое которых можно вставить в другие страницы. Причём это содержимое считывается при каждой загрузке страницы: изменения в шаблоне проявятся на страницах, их применяющих. Ниже описывается их работа.
Содержание
- 1 Общая информация
- 2 Параметры
- 3 Просмотр содержимого шаблона
- 4 msgnw
- 5 Ссылка на редактирование шаблона
- 6 Ограничения и возможности
- 7 Тэг категории в шаблоне. Проблема с кэшированием
- 8 Теги <noinclude> и <includeonly>
- 9 Кэширование
- 10 Подстановка
- 11 Перенаправления
- 12 Ссылки на шаблон
- 13 История изменений для страниц, содержащих шаблоны
- 14 См. также
Общая информация
Страницы шаблонов — полноценные вики-документы, для которых отведено своё пространство имён «Шаблон:». В Википедии их позволено править любому участнику.
Вызывается шаблон пометкой
{{Имя шаблона}}
При отображении страницы на место этого будет помещено содержимое страницы «Шаблон:Имя шаблона». Если её ещё нет, то пометка будет отображена как ссылка на несуществующую статью шаблона. Поэтому, чтобы не озадачивать читателя красной ссылкой, подобной Шаблон:POV cehck, удостоверьтесь в существовании вызываемых шаблонов — это делается предпросмотром страницы до сохранения правки.
Если в главном пространстве имен существует статья Имя шаблона, то можно вызвать ее, поставив перед именем шаблона двоеточие
{{:Имя шаблона}}
Таким образом, любую страницу можно использовать как шаблон. Если вызывать так картинку
{{Изображение:Имя шаблона}}
или категорию,
{{Категория:Имя шаблона}}
то будет подставлена описательная часть картинки и категории соответственно. Таким способом удобно
- экспериментировать с шаблонами (не залезая в пространство шаблонов);
- «вытаскивать» подписи и описания картинок;
- изготавливать специальные составные статьи (например, для печати).
Как обычно в MediaWiki, имя статьи или шаблона чувствительно Шаблон:Nobr Шаблон:Nobr эквивалентен подчёркиванию.
Возможно также включение шаблона в шаблон, Шаблон:Nobr вызов Шаблон:Nobr Шаблон:Nobr Шаблон:Nobr Шаблон:Nobr
Переменные шаблона (cм. ниже) вычисляются после вставки шаблона Шаблон:Nobr статью, Шаблон:Nobr если Шаблон:Nobr содержится подстановка {{PAGENAME}}
, Шаблон:Nobr будет развёрнута Шаблон:Nobr вызывающей статьи, Шаблон:Nobr этого шаблона.
Список ссылок на используемые Шаблон:Nobr страницы шаблоны показывается Шаблон:Nobr редактирования статьи, причём показываются все шаблоны, даже если редактируется только раздел документа, который Шаблон:Nobr шаблонов (при предварительном просмотре).
Параметры
Параметры шаблона могут быть поименованными или пронумерованными. Синтаксис использования может быть
{{templatename|parname1=parvalue1|parname2=parvalue2}}
, тогда Шаблон:Nobr надо ссылаться на{{{parname1}}}
,{{{parname2}}}
;{{templatename|parvalue1|parvalue2}}
, тогда Шаблон:Nobr нужно использовать{{{1}}}
,{{{2}}}
.
Лишние (не используемые в теле шаблона) параметры игнорируются.
Имена параметров чувствительны к регистру символов.
- Обратите внимание на тройные фигурные скобки при использовании параметров!
Таким образом, механизм шаблонов выполняет два типа подстановок:
- вызов шаблона (двойные фигурные скобки) заменяется содержимым шаблона;
- параметры шаблона (тройные фигурные скобки) заменяются параметрами шаблона.
Параметром шаблона может быть ссылка на другую статью. Пусть, например, Шаблон:Nobr Шаблон:Nobr
Начало {{{1}}} Конец.
и он называется «Шаблон». Тогда его вызов
{{Шаблон| [[Main_Page|Главная страница]]}}
будет развёрнут в
Начало Главная страница Конец.
Неопределённые и пустые параметры
Если какой-то параметр «someparameter» не задан, то он остается нераскрытым текстом {{{someparameter}}}
, что позволит раскрыть его Шаблон:Nobr если вызвавшая шаблон статья также включается Шаблон:Nobr где этот параметр задан.
Заметим, между прочим, что вызов {{Шаблон||a}}
делает первый параметр определённым, Шаблон:Nobr пустой строке. Если, напротив, нужно задать второй параметр, никак Шаблон:Nobr первый, Шаблон:Nobr следует использовать вызов {{Шаблон|2=a}}
. Этот синтаксис следует использовать также Шаблон:Nobr случае, когда значение параметра содержит Шаблон:Nobr (например, «a=b»), поскольку вызов {{Шаблон|a=b|c}}
Шаблон:Nobr Шаблон:Nobr Шаблон:Nobr Шаблон:Nobr Шаблон:Nobr Шаблон:Nobr Шаблон:Nobr {{Шаблон|1=a=b|2=c}}
сделает Шаблон:Nobr Единственный минус состоит Шаблон:Nobr что приходится нумеровать все параметры шаблона. Кроме этого, для вставки Шаблон:Nobr можно использовать цифровую ссылку Шаблон:Nobr (en:Numeric character reference), записав =
.
Условное включение параметров
Если, наоборот, появление нераскрытого текста Шаблон:Nobr Шаблон:Nobr использовать условное включение параметра Шаблон:Nobr шаблона. Параметр, записанный Шаблон:Nobr
{{{parameter|альтернативный текст}}}
будет включён в текст шаблона только Шаблон:Nobr случае, если значение параметра задано. Шаблон:Nobr случае вместо значения параметра появится альтернативный текст. Этот способ уместен Шаблон:Nobr обстоятельствах, когда для некоторого параметра шаблона подразумевается определённое значение Шаблон:Nobr Самый простой пример: если некоторый параметр parameter
записан внутри шаблона Шаблон:Nobr Шаблон:Nobr Шаблон:Nobr если Шаблон:Nobr альтернативного текста используется Шаблон:Nobr тогда Шаблон:Nobr Шаблон:Nobr вообще ничего выводиться Шаблон:Nobr Шаблон:Nobr если Шаблон:Nobr окажется Шаблон:Nobr
Иногда возникает необходимость переменить Шаблон:Nobr Шаблон:Nobr чем Шаблон:Nobr если Шаблон:Nobr Шаблон:Nobr Шаблон:Nobr употребляются функции парсера: {{#if}}
и другие. {{#if}}
вызывается следующим образом:
{{#if: проверяемая-переменная-или-параметр | текст-для-случая,-когда-значение-test-не-пустое | текст-для-случая,-когда-значение-test-пустое }}
Параметр else
не является обязательным, поэтому можно использовать сокращённую форму:
{{#if: проверяемая-переменная-или-параметр | текст-для-случая,-когда-значение-test-не-пустое }}
Демонстрационный пример употребления:
{{#if: {{{sample|}}} | параметр '''sample''' определён! | параметр '''sample''' пуст! }}
Реальный пример применения {{#if}}
Шаблон:Nobr найти Шаблон:Nobr шаблона {{Fidonet}}.
Просмотр содержимого шаблона
Чтобы увидеть «сырое» содержимое шаблона (подстановки параметров Шаблон:Nobr нужно смотреть Шаблон:Nobr Шаблон:Nobr редактирования, поскольку Шаблон:Nobr некоторые подстановки вроде {{PAGENAME}}
могут раскрыться.
msgnw
Для показа содержимого шаблона (без wiki-интерпретации) можно использовать кодовый «волшебный» префикс «msgnw:». То есть Шаблон:Tl будет показана как
а {{msgnw:Заготовка}} как
[[:Шаблон:Заготовка]]
Ссылка на редактирование шаблона
«Редактирующая» ссылка на каждой странице-статье не позволяет редактировать текст используемого шаблона, а иногда желательно иметь такую ссылку (приглашающую поправить шаблон, например, если шаблон еще не устоялся, или если его содержимое может часто изменяться). Такую ссылку можно «зашить» внутрь самого шаблона, даже более того — сделать шаблоном, который можно использовать внутри других шаблонов. См. шаблон Шаблон:Tl.
Ограничения и возможности
Использование вложенных двойных или тройных фигурных скобок внутри двойных вложенных скобок
Не получится вызывать шаблоны в зависимости от содержимого других шаблонов. Допустим, у нас есть шаблон «tctc» с содержимым «tc», и шаблон «tc» с содержимым «Ура».
Тогда вызов {{{{tctc}}}}
даст текст {{{{tctc}}}}, а не «Ура».
Не получится использовать значение раскрытого шаблона при вызове другого шаблона. Зато можно использовать значения переданных переменных, при указании значений переменных для вызываемого шаблона.
Тэг категории в шаблоне. Проблема с кэшированием
Если шаблон содержит код категории, то в указанную категорию помещается не только шаблон, но и все страницы, включающие его, поэтому удобно использовать шаблоны для рубрикации статей.
Но может возникнуть проблема с кэшированием — если поменять категорию у шаблона, то категория у включающих этот шаблон страниц поменяется не сразу, а только через некоторое время, после того как серверы Википедии выполнят необходимые действия. Процесс выполнения можно отследить на странице Special:Statistics — длина очереди заданий отражает количество тех статей, которые ещё не обновились.
Кроме того, категория немедленно меняется Шаблон:Nobr отредактированных статей.
Желательно использовать категории включённые в шаблон только для шаблонов предназначенных для пометки статей (типа {{stub}}
), и не включать категории в навигационные шаблоны.
Теги <noinclude> и <includeonly>
Всё, что находится между тегами <noinclude> и </noinclude> будет обрабатываться и показываться только в случае когда шаблон показывается непосредственно, не включенным в другую страницу. Возможные применения:
- категоризация шаблонов самих по себе (а не тех страниц, в которые шаблон включён);
- интервики на аналогичные шаблоны на других языках;
- страницы в пространстве имён MediaWiki;
- текст с объяснением того, как использовать шаблон.
Тег <includeonly> обладает противоположным действием. Текст между <includeonly> и </includeonly> будет обрабатываться и показываться только тогда, когда шаблон включён в статью. Очевидное применение:
- включение всех статей, содержащих шаблон, Шаблон:Nobr (при этом сам шаблон в категорию не попадёт).
Будьте внимательны! Не допускайте пустых строк вокруг конструкций <noinclude> и <includeonly>, так как пустая строка будет интерпретироваться как перенос строки, который будет внесён шаблоном в статью.
Следует отметить, что при этом сохраняется описанная Шаблон:Nobr разделе проблема: если включить статью Шаблон:Nobr посредством шаблона, Шаблон:Nobr изменить категорию Шаблон:Nobr Шаблон:Nobr будут содержаться Шаблон:Nobr категории, хотя при их просмотре будет создаваться впечатление, что они содержатся Шаблон:Nobr Шаблон:Nobr будут Шаблон:Nobr включены Шаблон:Nobr категорию либо немедленно после их редактирования Шаблон:Nobr или через некоторое время Шаблон:Nobr отложенной обработки заданий сервером Википедии).
Кэширование
Правка шаблона автоматически сбрасывает кэширование всех статей, напрямую использующих этот шаблон. Однако в случае с косвенными зависимостями (шаблоны зависящие от параметров и т. п.), внутренний кэш системы не сбрасывается и стандартный «Refresh» браузера может не помочь. В таких случаях используйте «action=purge», т. е. вызывайте URL типа:
[{{SERVER}}{{localurl:{{NAMESPACE}}:{{PAGENAME}}|action=purge}} Очистить кэш страницы]
что отобразится как
Подстановка
Используя «подст:» (или «subst:») после двойных фигурных скобок заставляет выполнять подстановку текста шаблона или даже переменной в момент сохранения ссылающейся страницы.
Например, текущие дата и время:
{{подст:CURRENTDAY}} {{подст:CURRENTMONTHNAMEGEN}} {{подст:CURRENTYEAR}}, {{подст:CURRENTTIME}} (UTC)
подставится при сохранении страницы:
29 апреля 2007, 12:32 (UTC)
в то время как
{{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}, {{CURRENTTIME}} (UTC)
каждый раз будет показывать текущее время:
21 ноября 2024, 21:42 (UTC)
Шаблон:Tls ~~~~ используется для приветствия новых участников.
Если нужно использовать подстановку для статьи из основного пространства имён, используйте конструкцию с двумя двоеточиями подряд. Так, следующий пример:
{{subst::Страница}}
подставит в текст содержимое страницы Страница.
Альтернатива подстановке
- Используйте {{..}}, затем воспользуйтесь страницей Служебная:Expandtemplates, скопируйте оттуда результат и замените исходные {{..}}.
- Аналогично можно использовать msgnw.
Перенаправления
Когда страница, вызванная для включения, является страницей-перенаправлением, то включается содержимое страницы, на которую указывает перенаправление.
Страница, которая ничего не содержит, кроме включения другой страницы, в общем схожа со страницей-перенаправлением, но имеет и множество различий, например:
- Заголовок страницы-результата есть имя исходной страницы, а не включаемой страницы.
- Вся функциональность, (редактирование, обсуждение, список наблюдения, …) относится к включающей странице, и ничего (если не смотреть код) не связывает ее с включаемой страницей.
- Включающая страница лежит в тех же категориях, что и включаемая.
- Работают «двойные перенаправления» основанные на включении.
Ссылки на шаблон
Отметим, что если ссылаться (в смысле гиперссылок) на шаблоны, как на обычные статьи, то нельзя передать им параметры (что, в общем, очевидно). Однако, иногда это может быть полезно, например, ссылка на увеличенное изображение.
История изменений для страниц, содержащих шаблоны
При просмотре исторических версий статей, содержащих шаблоны и/или картинки, всегда используется текущая версия шаблонов (и картинок), т. е. невозможна автоматическая «абсолютная» реконструкция исторических версий композитных текстов, чтобы также содержались ссылки на соответствующие картинки и шаблоны.
См. также
bs:Wikipedia:Šabloni ca:Viquipèdia:Espai de noms de MediaWiki da:Wikipedia:MediaWiki navnerummet de:Wikipedia:Vorlagen en:Wikipedia:Template namespace es:Wikipedia:Espacio de nombres de MediaWiki fr:Wikipédia:Espace modèle nl:Wikipedia:MediaWiki naamruimte simple:Wikipedia:MediaWiki namespace sv:Wikipedia:MediaWiki namnrymd zh:Wikipedia:Template名字空间