Help:Шаблони

This page is a translated version of the page Help:Templates and the translation is 31% complete.
Outdated translations are marked like this.
PD Зверніть увагу! Коли Ви редагуєте цю сторінку, то погоджуєтесь робити свій внесок під ліцензією CC0. Детальніше про умови ліцензії можна дізнатися на сторінці довідки. PD

Шаблони у MediaWiki приходять на допомогу тоді, коли ви маєте певні стандартні тексти, які хочете використати на кількох сторінках. На відміну від розширень та медіафайлів, централізованого сховища для шаблонів не існує. Шаблони створюють заново або, щоб не дублювати зроблену роботу, беруть готовими із інших вікі (наприклад, Вікіпедії) й імпортують у свою вікі. Templates can be newly written or, to save duplicating work already done, exported from another wiki e.g. Wikipedia, and then imported into the target wiki.

Шаблони — стандартні вікісторінки, вміст яких призначений для включення (вбудовування) всередину інших сторінок. Назви сторінок шаблонів за традицією мають префікс «Шаблон:», завдяки чому вони належать до цього простору назв; крім цього, їх можна створювати як будь-яку іншу вікісторінку.

To transclude a template, you used double open & close curly brackets {{template name}}.

Розглянемо найпростіший приклад застосування шаблону. Якщо створити сторінку «Шаблон:Welcome» з таким вмістом:

Привіт! Ласкаво просимо до вікі.

то це і буде ваш перший шаблон! Тепер використання такого коду:

{{Welcome}}

на будь-якій іншій сторінці приведе до того, що при перегляді цієї сторінки на місці коду {{Welcome}} з'явиться текст «Привіт! Ласкаво просимо до вікі.» Так вміст шаблону «включається» до іншої сторінки, тобто інтегрується в неї.

Тепер ви можете вписати {{Welcome}} в будь-якому місці будь-якої сторінки, де ви вважаєте доречним появу такого привітання. Нехай ви записали такий код на 100 сторінках. Якщо тепер ви зміните текст шаблону на такий:

Наші вітання! Ласкаво просимо до цієї чудової вікі.

і знову відвідаєте будь-яку з цих 100 сторінок, які використали цей шаблон, то ви побачите вже модифікований текст. У такий спосіб ви можете змінити одразу 100 сторінок без редагування кожної з них, — змінивши шаблон, який ці сторінки включають.

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

Ways to invoke a template

Інші сторінки можуть використовувати сторінки шаблонів в такий спосіб:

  • {{Назва}} — як описано вище, таке посилання буде замінено поточним вмістом сторінки [[Template:Назва]] при кожному показі сторінки. Рушій MediaWiki залишає це посилання в вікітексті сторінки незмінним.

Because the template call remains in the pages's source, any subsequent change to Template:Name will be seen on the page containing the template call. Also, the page will be listed among those that "link to" the template.

  • {{subst:Назва}} — при використанні такого посилання на шаблон його буде раз і назавжди замінено вмістом [[Шаблон:Назва]] станом на час збереження сторінки з посиланням: копія вмісту [[Шаблон:Назва]] замінить посилання на шаблон. Тоді вміст є частиною включеної сторінки, і його можна редагувати на сторінці звичайним чином. Увага: пізніші зміни початкового коду сторінки шаблону не поширяться на сторінку з посиланням на шаблон.

That is, a copy of the contents of Template:Name will be substituted for the template call. No link is maintained between the page and the template, so each can be edited further without affecting the other. In effect, there is little difference between substituting the content in this way and simply typing it into the page's source "manually". See Допомога:Підставляння for more information.

  • {{safesubst:Назва}} — ця конструкція поводить себе точно так, як і subst:, різниця виникає, лише коли вона зустрічається всередині іншого шаблону і цей шаблон або вставляють (за першою схемою), або прямо переглядають.

See Допомога:Підставляння for more information.

  • {{msgnw:Назва}} включає шаблон у формі без вікіформатування (так само, як це робить ‎<nowiki>) при перегляді сторінки з цим шаблоном.

For example, {{msgnw:Template:Thankyou}} displays:

<noinclude> <languages/> </noinclude> '''Спасибі…''' за {{{reason|{{{1}}}}}}. Обіймаю, {{{signature|{{{2}}}}}} <noinclude> [[Category:Template examples{{#translation:}}|{{PAGENAME}}]] </noinclude>

Насправді будь-яка сторінка вікі може бути використана як шаблон, для цього слід явно вказати простір назв, в якому вона знаходиться:

  • {{Template:Назва}} включає сторінку [[Template:Назва]]
  • {{Talk:Назва}} включає сторінку [[Talk:Назва]]
  • {{:Назва}} включає сторінку [[Назва]]
    • {{subst::Назва}} заміщується вмістом [[Назва]]

Якщо такого простору імен не існує, то повна назва вважатиметься назвою сторінки в просторі шаблонів:

  • {{Foo:Bar}} включає сторінку [[Template:Foo:Bar]]

Regardless of what syntax is used, the name of the template can be relative to the current page For example, if {{/bar}} is called on page foo, it will transclude the page foo/bar.

It can also be generated dynamically. For example, {{ {{foo}} }} calls Template:foo and interprets the result as the name of another template to call.

Параметри

Для збагачення механізму включення MediaWiki дозволяє передавати параметри шаблону. Ці параметри дозволяють одному й тому самому шаблону продукувати різні результати чи по-різному поводитися.

Нехай ви вставляєте коротку подяку на сторінку обговорення іншого користувача, приміром:


Спасибі… за вашу працю. Обіймаю, Я


Ця подяка містить причину (в наведеному прикладі — за вашу працю) та підпис (Я). Зробити те ж за допомогою вашого шаблону Thankyou зможе будь-який користувач.

Щоб подяка виглядала подібно у всіх місцях, де її використано, ви можете створити шаблон із назвою, наприклад, Template:Thankyou . Хоча подяка має виглядати подібно, коли б один користувач не дякував іншому, її безпосередній вміст (тобто причина і підпис) буде різним. З цієї причини, вам треба зробити їх параметрами. Знехтувавши кодом форматування рамки та зображення, звернемо увагу на змістовний у даному контексті фрагмент шаблону:

'''Спасибі…'''
за {{{1}}}.
Обіймаю, {{{2}}}

Зверніть увагу на використання {{{1}}} та {{{2}}}. Це один зі способів ідентифікувати параметри всередині шаблону, значення яких буде задаватися при використанні шаблона. Зверніть увагу, що назва кожного параметра в шаблоні взята в три фігурні дужки: {{{ }}}. Це не те саме, що використання назви шаблона.

Використовуючи цей шаблон на деякій сторінці, ви заповнюєте значення параметрів, розділяючи їх символом вертикальної риски (|). MediaWiki дозволяє передавати параметри шаблону трьома способами: як анонімні, нумеровані та названі.

Анонімні параметри

Значення анонімних параметрів просто перелічують послідовно одне за одним:

{{Thankyou|вашу працю|Я}}

У цьому випадку шаблон {{Thankyou}} отримує для заміщення {{{1}}}=вашу працю та {{{2}}}=Я і дає в результаті:


Спасибі… за вашу працю. Обіймаю, Я


Порядок, в якому перелічено параметри, критичний для правильного функціонування шаблона. Якщо при включенні шаблона змінити порядок параметрів таким чином:

{{Thankyou|Я|вашу працю}}

дістанемо такий результат:


Спасибі… за Я. Обіймаю, вашу працю


Визначення параметрів за порядковим номером (за допомогою {{{1}}} тощо) працює лише для анонімних параметрів. Будь-які параметри, визначені за іменем, як показано нижче, не будуть доступними для шаблону за допомогою порядкових номерів. Any parameters identified by name, as shown below, will not be accessible to the template using ordinal numbers.
Якщо всередині аргументу анонімного параметра шаблона є знак рівності, цей параметр може хибно тлумачитися як іменований (що пояснено нижче у цьому документі): при цьому текст до знаку рівності трактуватиметься як ім'я параметра, а після знаку — як його значення. Це поширена проблема, коли треба включити зовнішнє посилання чи елемент HTML із атрибутами (див. завдання T16235). Обхідним шляхом є використання натомість іменованих параметрів або навіть нумерованих, як пояснено в наступному розділі.

Нумеровані параметри

Для того щоб передати параметри в нумерованому стилі, просто позначте кожен з них номером:

{{Thankyou|2=Я|1=вашу допомогу}}

Цього разу код шаблону {{Thankyou}} отримає параметри {{{1}}}=вашу допомогу та {{{2}}}=Я, незалежно від порядку їх запису при використанні шаблону, і дасть такий результат:


Спасибі… за вашу дружбу. Обіймаю, Я


Це також може бути корисно, коли будь-який з пронумерованих параметрів містить знак «=».
Приклади
{{Thankyou|1=adding “=”|2=Me}}

видає


Спасибі… за додаючи “=”. Обіймаю, Я

  Увага: Для цього також потрібна нумерація параметрів один одного.

Названі параметри

Третій спосіб передавати параметри шаблону — це надати їм якісь назви замість номерів. Для цього слід змінити сторінку шаблону так:

'''Спасибі…'''
за {{{reason}}}.
Обіймаю, {{{signature}}}

Всередині шаблону ми використали назви {{{reason}}} та {{{signature}}} замість номерів для позначення кожного параметра. Передавати ці параметри за назвою слід так:

{{Thankyou|signature=Я|reason=те, що ви є}}

У цьому разі код шаблону {{Thankyou}} отримає параметри {{{reason}}}=те, що ви є та {{{signature}}}=Я, в результаті побачимо:


Спасибі… за те, що ви є. Обіймаю, Я


Іменовані параметри регістрозалежні, тому:

{{Thankyou|signature=Я|Reason=те, що ви є|reason=те, що ви регістрозалежні}}

дає:


Спасибі… за те, що ви регістрозалежні. Обіймаю, Я


Перевагою такого способу передачі параметрів, крім гнучкості порядку, в якому їх можна вказувати, є те, що код шаблону стає більш зрозумілим, у ньому суттєво легше розібратися у випадку більшої кількості параметрів. Необхідність пам'ятати назви параметрів при використанні шаблону можна віднести як до переваг, так і до вад цього способу.

Spaces and newlines are automatically stripped from the start and end of named parameter names and values, but are preserved in unnamed parameters.

Mixing named and unnamed parameters

If the template supports it, both kinds of parameters can be used in one call.

For example, {{Thankyou|supporting both parameter types|signature=Me}} results in:


Спасибі… за supporting both parameter types. Обіймаю, Me


Be careful when doing this, because it can result in conterintuitive results as unnamed parameter counts are based only on the unnamed parameters, not the named parameters. For example, {{Thankyou|Me|reason=supporting both parameter types}} results in:


Спасибі… за supporting both parameter types. Обіймаю, {{{2}}}


The template is coded to prefer the named parameter for the reason over the unnamed parameter, resulting in the "Me" being lost and no signature being given. This results in a default value of {{{2}}} being shown, as explained below.

Значення за замовчуванням

Якщо ви включаєте шаблон, який очікує параметри, але не вказуєте їх аргументи, таким чином:

{{Thankyou}}

то результат (для перших двох способів передачі параметрів) вийде схожим на:


Спасибі… за {{{1}}}. Обіймаю, {{{2}}}


Не знайшовши вказаних параметрів, шаблон підставив внутрішні назви цих параметрів замість відповідних значень. Для того, щоб подібне використання шаблону зробити ефективним, слід задати стандартні значення параметрів, тобто ті, які буде виведено у випадку, коли відповідні значенні параметрів шаблону не передано. Так, якщо змінити сторінку шаблону таким чином:

'''Спасибі…'''
за {{{reason|все}}}.
Обіймаю, {{{signature|Я}}}

тоді {{{reason|все}}} визначає, що, якщо параметру {{{reason}}} не надано аргумент, то використовуватиметься значення все. Аналогічно, {{{signature|Я}}} встановлює значення за замовчуванням Я параметру {{{signature}}}. Тепер включення шаблону знову без передачі будь-яких параметрів призведе до наступного:


Спасибі… за все. Обіймаю, Я


The value of a parameter can be an empty string. For example, in {{foo|bar=}} or {{foo|bar=|baz=qux}}, the foo template considers the bar parameter to be "". This is different from omitting the parameter altogether, which leaves it undefined and triggers the default value mechanism described above.
If you need to treat an empty string the same way as a missing parameter, you can use a conditional operator through an extension like ParserFunctions. For instance, {{#if:{{{1|}}}|{{{1|}}}|undefined}} returns undefined if the parameter is either undefined or empty, while {{{1|undefined}}} does so only if the parameter is undefined.

Often default values are used to specify alternate names of parameters. For example, if you have {{{a|{{{b|}}} }}}, the template will first look for a parameter named "a". If it is not set, it will use the parameter named "b". If neither "a" nor "b" is set, it will output nothing.

Passing parameters to other templates

If raw parameter syntax is generated by the above template call, and then passed through to another template, it is not interpreted as a parameter.

This means that {{Thankyou2 }}, which just calls {{Thankyou }} with no parameters, does not work: {{thankyou2|everything|me}} -> Спасибі… за {{{1}}}. Обіймаю, {{{2}}} .

You instead need to explicitly pass the parameter to the other template, i.e if {{Thankyou3 }} contains

{{thankyou|{{{1}}}|{{{2}}}}}}

then {{thankyou3|everything|me}} -> Спасибі… за everything. Обіймаю, me } works properly.

This example does not preserve emptiness vs. undefinedness in parameter values - you would need more complicated syntax if you wanted to do that.

Empty vs undefined parameters

The {{t2demo|| a }} (refer to {{T2demo }} ), with a double pipe, sets the first parameter to an empty string instead of leaving it undefined. It produces the output start--middle- a -end, similar to how {{t2demo|1=|2= a }} results in start--middle- a -end. On the other hand, explicitly setting the parameter "2" to "a," results in the first unnamed parameter being left undefined:

{{t2demo|2= a }} results in start-{{{1}}}-middle- a -end

If the second parameter should not be trimmed, it must be unnamed.

Therefore, you can assign an empty string to the first parameter, but you cannot leave it undefined.

Making emptiness and undefinedness equivalent

Good template coding practices result in passing an empty string to a parameter working the same as not assigning any value. This makes things easier and more consistent.

For example, using p= can show that a template has a parameter "p" that doesn't have a value yet.

To make an empty string and an undefined value equivalent, use the following approaches:

  • Use {{{p|}}} exclusively instead of {{{p}}} or q where "q" is a non-empty value.
  • Use conditional checks like {{#if:{{{p|}}}|..{{{p}}}..|..}}, to ensure {{{p}}} is only used when it has a value.

If for some reason you want to treat undefined parameters differently from empty parameters or any other possible value you can compare the same parameter twice with different defaults, i.e {{#ifeq:{{{foo|bar}}}|{{{foo|baz}}}|parameter is defined|parameter is undefined}}.

Using equals signs in unnamed parameters

Unnamed parameters can include equals signs, but this must be done indirectly. Here are some methods using template:T1demo:

Default Value for Undefined Parameter

Assign a default value to an undefined parameter:

{{T1demo|{{{1| a=b }}}}}

This renders as: start a=b end.

Using the {{=}} parser function

Use a parser function that safely includes an equals sign:

{{T1demo| a{{=}}b }}

This renders as: start a=b end.

HTML Entities

Replace the equals sign with an HTML entity for display:

{{T1demo| a=b }}

This renders as: start a=b end.

This renders correctly without affecting the other parameters.

Handling unmatched curly and square brackets

Unmatched curly brackets ({{, }}) or square brackets ([[, ]]) must be inside nowiki tags or use HTML entities:

  • Rendering curly brackets have two options:
    • Use <nowiki>{{</nowiki> or &#123; for {
    • Use <nowiki>}}</nowiki> or &#125; for }.
  • Use &#91; for [ and &#93; for ].

Below are some examples:

Unmatched curly brackets
{{T1demo| <nowiki>{{</nowiki>content<nowiki>}}</nowiki> }}

This correctly renders the braces without breaking the template.

Unmatched square brackets
{{T1demo| text [link] more text }}

This correctly renders the braces without breaking the template.

This renders as: start text [link] more text end

Unmatched pairs not placed in nowiki tags either prevent template expansion or are taken as closing braces for the template call.

Below are some examples:

{{T1demo|abc]]def[[ghi}}

This will not expand correctly because of unmatched brackets.

The correct use:

{{T1demo|abc<nowiki>]]</nowiki>def<nowiki>[[</nowiki>ghi}}

This renders as: startabc]]def[[ghiend

Template-generated brackets

An alternate technique for passing arguments with unmatched brackets is to wrap them in another template

.

In that situation, (which exists with {{(( }} and {{)) }}) on this wiki), the unmatched brackets will be rendered literally, and not decoded as another template call. For example:

{{t1demo|{{((}}t1demo{{))}}}}

results in: start{{t1demo}}end

When substituting a template, template inclusions are parsed once when the subst happens (with the same caveats explained above) and then a second time when rendering the resulting wikitext. For example:

{{subst:((}}t1demo|foo}}

will expand on save to:

{{((}}t1demo|foo}}

which will then render as:

startfooend

If the wikitext generated via the first subst itself includes "subst:" syntax it will not be processed on the same save, but may be on the next save.

This technique may be used to implement recursive substitutions that take multiple saves to evaluate.

Using pipes in parameter values

A parameter value cannot contain a pipe character (|), because it would be interpreted as the end of that parameter and the start of the next parameter.

This can be worked around by using the parser function {{!}}, or the HTML entity &124;. The two methods of doing this have slightly different behavior, which can be relevant in some corner cases like when a template is producing wikitable syntax.

Example: {{T1demo|abc|def}} produces: startabcend

The "def" doesn't display because it is treated as part of another unnamed parameter, which the template does not use.

{{T1demo|abc{{!}}def}} produces: startabc|defend

The "def" displays properly.

{{T1demo|abc|def}} produces: startabc|defend

The "def" displays properly again.

Formatting template calls using extra parameters

Since templates ignore parameters they are passed but do not handle specifically, they can be used as a way of a adding extra whitespace or unused content to the template call.

For example:

{{template name|foo|bar|baz|mumble|quux}}

is equivalent to, assuming the template doesn't recognize SPACEN as a parameter name:

{{template name|SPACE1=
|foo|SPACE2=
|bar|SPACE3=Random stuff
|baz|SPACE4=
   |mumble|SPACE5=
  quux
}}

It is also possible to use the same name for each spacer (often the empty string), but this will populate Category:Pages using duplicate arguments in template calls, which many wikis prefer to keep empty to catch instances of user error.

This can be used to make the template render in a way similar to its output, like showing each row of w:Template:Chess position on its own like to make the wikitext also look like a chessboard.

Tracking parameter usage


It may be wise for a template to add a link or category to a page if a certain parameter or combination of parameters is used, to make if possible to easily determine what pages are using a given parameter, and thus what the impacts of changing that parameter in the template would be.

Evaluation process

This is an advanced topic which you can skip unless you need it.

Generally speaking, template parameters are substituted into the template after tokenization, but as is. They are not evaluated until they are used.

This has a few consequences:

  1. If you have a Template:Start containing {{mytemplate, and a Template:End containing |foo=bar}}, and put {{start}}{{end}} on a page, mytemplate isn't transcluded, because tokens like "|" cannot be added by a template and keep their special meaning in templates. You can still use templates to control the name of a parameter or template, but you cannot split a template call amongst multiple templates.
  2. Dead-code elimination: If you make a template call like {{foo|{{DISPLAYTITLE:Bar}} }}, and Template:Foo does not contain {{{1}}}, then the DISPLAYTITLE is not used, since it is only evaluated when needed, and there is no parameter to substitute it into, so it is never evaluated. This usually comes into play when using Extension:ParserFunctions , and can be especially noticed when used in combination with the int: magic word that varies by user language. This isn't perfect, and in some cases even if the result of expanding a template is not used (because it is part of an if statement condition, for example), the process of evaluating it can still have side effects. For example, any links produced or other templates used will still be added to Special:WhatLinksHere even if they are not displayed.

Template parameters are pass by value, which means a template cannot modify its arguments. Parameters are treated as associative array, and parameter names are evaluated before parameter values. If the same parameter name is given more than once (either as named or unnamed), only the last instace is used, and the page is added to Category:Pages using duplicate arguments in template calls.

Template calls starting with the magic word subst: or safesubst: are evaluated in a separate first pass that only happens at save time, along with ~~~~ and links using the pipe trick. If they cannot be evaluated during the first pass, subst: calls are ignored, and safesubst: are treated as if a normal template.

Many but not all parser functions, parser tags and trancluded special pages are not directly included like templates but instead are replaced by a "strip marker". This means you cannot manipulate the results with parser functions like padleft: or similar functions from extensions, as they see the strip marker instead of the result of the parser function.

Рекурсія в шаблонах

Включення шаблону в себе не кине MediaWiki в нескінченну рекурсію. MediaWiki зупинятиме рекурсію, а назву шаблону зробить жирним шрифтом. Наприклад, якщо вмістом Template:Aaaa є a {{Aaaa}} z, він відображатиме «a a Template loop detected: Template:Aaaa z z».

This safeguard precludes a potentially useful template idiom where a template self-normalizes its own calling arguments. In this forbidden example template:d can either be called {{d|20200311}} or {{d|y=2020|m=3|d=11}}. If called in the first manner, it recurses into itself with the second argument structure (obtained using string parser functions), which then follows a unified processing path.

{{#if:{{{1|}}}|{{d|y={{#sub:{{{1}}}|0|4}}|m={{#sub:{{{1}}}|4|2}}|d={{#sub:{{{1}}}|6|2}}}}|<!-- processing path with arguments y,m,d regardless of original call pattern -->}}

If template:d is modified to recurse into template:d/2 and template:d/2 is an identical manual copy of template:d this idiom works fine as the self-recursion safeguard operates dynamically and not statically.

A feasible way for the MediaWiki software to loosen the self-recursion rule would be to require that each recursive call have a distinct argument count from all previous active calls, at most once recursing with the argument count non-decreasing. That would provide a strong guarantee against infinite self-recursion while enabling useful idioms such as the one described here in a flexible manner.

If the processing path is of low complexity, a simple solution using only one template is to handle each calling convention on a separate if/else branch, duplicating the logic of the processing path within each case. If the processing path is more complex, each call-structure case can delegate to an implementation template with a unified call structure which provides the final template behaviour.

Tables in parameters

Since the pipe character (|) and equality sign (=) have different meanings in template calls and wikitables, in order to use table markup in the value of a template parameter one generally needs to "escape" those characters (i.e., protect them from interpretation as template markup) using special sequences:

  • the built-in magic word {{!}} provides an "escaped" version of | since MediaWiki 1.24
  • the built-in magic word {{=}} provides an "escaped" version of = since MediaWiki 1.39

Before the introduction of these magic words, many wikis used templates to accomplish the same things. On such a wiki, the magic words take precendence over the same-named templates.

Example table

A B C
A1 B1 C1
A2 B2 C1

Table code:

{| class=wikitable
!A!!B!!C
|-
|A1||B1||C1
|-
|A2||B2||C1
|}

Escaped table code:

{{{!}} class{{=}}wikitable
!A!!B!!C
{{!}}-
{{!}}A1{{!}}{{!}}B1{{!}}{{!}}C1
{{!}}-
{{!}}A2{{!}}{{!}}B2{{!}}{{!}}C2
{{!}}}

Note that the first left-brace ({) is interpreted as a literal left-brace character because it is immediately followed by the {{!}} magic word. Similarly, the last right-brace (}) is interpreted as a literal right-brace character because it is immediately preceeded by the same magic word. However, in some cases these brace characters do cause problems, so some wikis provide templates for escaping these characters, as well:

  • the template call {{(}} might provide an "escaped" version of {
  • the template call {{)}} might provide an "escaped" version of }

Some wikis go even further and provide other convenience templates like {{(!}} ({|), {{!)}} (|}), {{!!}} (||). On such a wiki, the code can be simplified a bit to this form:

{{(!}} class{{=}}wikitable
!A!!B!!C
{{!}}-
{{!}}A1{{!!}}B1{{!!}}C1
{{!}}-
{{!}}A2{{!!}}B2{{!!}}C2
{{!)}}

Управління включенням тексту шаблону до сторінок

За звичайного стану справ текст шаблону цілком відображується як при прямому перегляді, так і на сторінці, яка включає шаблон. Але є можливість обирати, які частини сторінки шаблону буде видно прямо, а які буде включено, за допомогою теґів $noinclude, $includeonly та $onlyinclude.

The template's page when viewed directly appears exactly as the template would render without any parameters. If the template requires parameters to function properly, this will result in raw wikitext syntax or errors as a result of them being missing.

For example:

  • If a parameter has no default value, it shows as the literal text {{{1}}}, indicating the template needs a parameter.
  • If a parameter has an empty default value (it is written as {{{1|}}}), it displays nothing, which achieves the intended effect but lacks clarity for self-documentation. Using a non-empty default value like {{{1|$1}}} could clarify a parameter's role, especially for templates involving images.
  • If a parameter without a default is passed to the #expr parser function, it results in an error message: "Expression error: unrecognized punctuation character '{'."
  • If a template creates a table, it's helpful for the template page to show the table's structure rather than the wikitext used to make it. To do this, the table syntax isn't enclosed in tags, and each table element includes both ‎<noinclude>...‎</noinclude> and ‎<includeonly>...‎</includeonly> parts where needed.

However, you can control which parts of a template will be seen and included by the use of the ‎<noinclude>, ‎<includeonly> and ‎<onlyinclude> tags.

Будь-який текст між ‎<noinclude> та ‎</noinclude> буде відображено при прямому перегляді сторінки шаблону, але не буде включено до будь-якої іншої сторінки. Це корисно, якщо необхідно включити до шаблону частину коду, яка не буде розповсюджуватися на інші сторінки, що цей шаблон включають, таку як:

Аналогічно, будь-який текст між ‎<includeonly> та ‎</includeonly> буде відображено лише при включенні шаблону на тій сторінці, яка його включає. Але його не буде відображено при прямому перегляді сторінки шаблону. Це корисно для:

  • Категоризації сторінок, які включають шаблон. Примітка: якщо в такий спосіб змінити категорії, до яких віднесено шаблон, на відображення цієї зміни на сторінках, що включають цей шаблон, необхідний певний час: це зумовлено чергою задач . Щоб примусити рушій MediaWiki терміново переглянути категорії певної сторінки, відкрийте її для редагування та збережіть без жодної зміни.
  • Гарантування того, що код шаблону не виконуватиметься при перегляді сторінки шаблону. Зазвичай це роблять, коли шаблон очікує параметри, а без параметрів дасть безглуздий результат.

Будь-який текст поза межами теґів ‎<noinclude> та ‎<includeonly> обробляється та відображується за звичайними правилами, тобто як при перегляді сторінки шаблону, так і при включенні шаблону до іншої сторінки. Основна увага приділяється тому, що є всередині цих тегів.

Усе, що поза тегами ‎<onlyinclude>, відкидається при включенні шаблона. Навіть шматки всередині тегів includeonly не будуть включені, якщо тільки вони теж не позначені як onlyinclude. Основна увага приділяється тому, що є поза цими тегами.

For example, if a page like Help:Templates/onlyinclude demo has the wikitext:

abc<onlyinclude>def</onlyinclude>ghi<includeonly>jkl</includeonly>

The result of transcluding it is def.

Вкладення цих тегів одні в одні також можливе.

Три пари тегів часткового включення дозволяють усі можливі комбінації того, що буде оброблятися і виводитися. Коментарі також мають значення. Inclusion tags are respected when using {{subst:templatename}}, but they are not respected when using {{msgnw:templatename}} as that displays the raw wikitext without any processing.

Section transclusion

To transclude different sections of a template on different pages, you can wrap the content in onlyinclude tags and use an if statement on parameters to select which section.

Consider "Template:Example" with this wikitext:

== Section 1 ==
{{#ifeq:{{{1|1}}}|1|
Content of section one.
}}
{{#ifeq:{{{1|2}}}|2|
== Section 2 ==
Content of section two.
}}

This will render both sections on the example page itself, and allow other pages to transclude the first section with {{example|1}} and the second section with {{example|2}}.

Another approach is to use literal parameter syntax instead:

{{{section1|
== Section 1 ==
Content of section one.
}}}
{{{section2|
== Section 2 ==
Content of section two.
}}}

Transclude the first section with {{example|section2=}} and the second section with {{example|section1=}}. If neither parameter is used, then both sections will display.

A third approach is to use Labeled Section Transclusion.

Організація шаблонів

Для ефективного користування шаблонами, користувачі мають могти їх знайти і дізнатися, як їх використовувати.

Знайти сторінки шаблонів користувач може так:

  1. Натиснути Спеціальні сторінкиУсі сторінки
  2. У переліку Простір назв: обрати Template та натиснути Виконати.

Для надання інформації про використання шаблону слід вмістити на його сторінці приклад, подібний до такого:

<noinclude>
== Використання ==
Подякувати користувачу:
{{Thankyou|reason=ваша причина|signature=ваш підпис}}
</noinclude>

Тоді дописувач може скопіювати цей приклад і вставити його на сторінку, а потім вписати актуальні параметри.

While editing a page, a list of all templates used is available under the editing form, in a collapsible section titled "Шаблони, використані на цій сторінці:" (also named "Шаблони, використані в цьому попередньому перегляді:", or "Шаблони, використані в цьому розділі:" depending on the context). This list provides a convenient link to the template's page, as well as information about its protection status. Redirected templates are shown in italics, with the redirect target added as a separate list item.

Посилання на шаблон

На сторінку шаблона можна дати посилання, як і на будь-яку іншу вікісторінку. Наприклад, посилання Template:Navbar утворюється завдяки вікікоду [[Template:Navbar]].

У багатьох вікі існує Template:Tl, який дозволяє дати посилання на шаблон, і до того ж вивести подвійні фігурні дужки, потрібні для включення шаблона, але при цьому не роблячи самого включення. Наприклад, використання коду {{tl|Navbar}} дасть {{Navbar }}.

Така форма подачі зазвичай використовується у документації шаблона, на сторінках довідки, а також на сторінках обговорення, коли мова йде про шаблони. Того ж ефекту можна досягти, скориставшись кодом {{[[Template:Navbar|Navbar]]}}, але викорстання {{Tl }} дозволяє друкувати менше тексту. У конкретній вікі шаблон Tl, якщо він так існує, може виводити або не виводити текст в елементі «code», як це показано тут. Якщо ні, то можливо, це робить інший шаблон, з подібною назвою. Наприклад, можете переглянути розділ «See also» документації шаблона en:Template:Tl в англомовній Вікіпедії.

Template naming

The name of a template is case-sensitive excluding the first character.

You make redirects for alternate capitalizations. For example, if a template is named "AdminAbbr", you can create a redirect named "Adminabbr". This way, the template can be called with either {{AdminAbbr}} or {{adminabbr}}. If an editor prefers a mix of upper and lower case for clarity, they can use functions like lc or uc. For instance, instead of {{CURRENTINTERNETTIME}}, they could use {{ {{uc:CurrentInternetTime}} }}

Because template names are interpreted in the same way to the names of other pages, underscores are replaced with spaces, and any text after a number sign (what would be a anchor in a standard link) is ignored.

An underscore _ can be alternative to a blank space.

Possible uses of templates

Templates can be used for any situation in which one wants two or more pages to contain identical or similar content that is edited together rather than independently. They can be used to:

  • Provide structured elements on many pages, like infoboxes, maintenance templates, navigational boxes, etc.
  • Perform calculations used as a programming tool on various pages, like w:Template:Sum.
  • Build composite pages that display the content of multiple existing pages together, like w:WP:Village pump (all) which includes content from each section of the village pump. The content of these pages can either be shown individually, or together, but the revision history, watchlist, etc. will only pick up changes to the transcluded pages and the raw wikitext of the composite page itself, not implicit changes to the composite page.
  • Share some content between a few related pages. For example, the list at Help:Preferences#Beta features is duplicated at Beta Features#Current Beta Features. While on MediaWiki.org that is built using Extension:LabeledSectionTransclusion instead, it could have been done using a template.
  • Store content referenced multiple times on the same page, so it only has to be written and calculated once. For example w:Template:Cite Monumentenregister/URL is called twice by w:Template:Cite Monumentenregister in two different places, and using another template means the URL pattern only has to be written once in the base template.
  • Use templates as a programming element to generate a loop: if Template:A calls Template:B 10 times with different parameters, then that crudely simulates a for loop. If Template:B calls Template:C 10 times, then you have a nested loop of 100 calls of Template:C. But keep in mind that it is easy to run into the template limits when using templates as advanced programming constructs, and using Scribunto is generally clearer and easier to follow.

Копіювання з однієї вікі до іншої

It is possible, if allowed by the wiki configuration to transclude templates from other wikis. This configuration setting is disabled on Wikimedia wikis. Otherwise, you need to manually copy the template and its dependencies from the source wiki to the destination wiki to use it.

Шаблони зазвичай спираються на CSS чи на інші шаблони, тому користувачі часто стикаються із проблемами при переносі шаблону з однієї вікі до іншої. Кроки, перелічені нижче, мають допомогти у більшості ситуацій.

The steps below should work for most templates.

Код MediaWiki

Якщо у вас є права на імпортування (конкретно, «Import pages from a file upload») у цільовій вікі:

  1. Перейдіть до сторінки Special:Export оригінальної вікі і завантажте файл .xml, який містить повну історію всіх необхідних шаблонів, таким способом:
    • Введіть повну назву потрібного шаблону у текстове поле, приміром, «Template:Welcome». Особливу увагу звертайте на регістр літер та спеціальні символи — якщо назва шаблону не є абсолютно точною, експорт може все одно відбутися, але отриманий .xml-файл не міститиме очікуваних даних.
    • Поставте прапорець біля «Включити шаблони».
    • Зніміть прапорець біля «Включати тільки поточну версію, без повної історії».
    • Натисніть «Експорт».
  1. У цільовій вікі перейдіть до сторінки Special:Import та вивантажте отриманий файл .xml.

Якщо у вас немає прав імпорту у цільовій вікі:

  1. Перейдіть до сторінки необхідного шаблону, потім до сторінки його редагування, звідки скопіюйте весь вікітекст
  2. У цільовій вікі перейдіть до створення/редагування сторінки з такою самою назвою, як сторінка шаблону, текст якого ви скопіювали. Вставте скопійований вікітекст. У короткий опис змін нового шаблону запишіть посилання на його оригінал.
  3. На сторінці редагування шаблону в оригінальній вікі, нижче вікна редагування, знайдіть перелік «Templates used on this page:». Для кожного шаблону з цього переліку відтворіть інструкції, описані вище. Зробіть так само для шаблонів, використовувані шаблонами з цього переліку, і так далі.
  1. On the new wiki, go to the page with the same name as the template you copied. Hit create/edit and paste the wikitext you copied. In the edit summary of each template, link to the original page for attribution.
  1. Back in the original wiki at the edit window, below the edit box, look at the list of "Templates used on this page". For each template listed follow these instructions. Also do that for any template used by any of these templates, and so on.

У такий спосіб буде скопійовано весь необхідний код, і цього для багатьох шаблонів буде достатньо. Зазначимо, що експортуються лише ті елементи сторінки, які було розібрано при відображенні сторінки, тож, приміром, підсторінки документації в такому процесі не експортуються. Якщо це не спрацює, у цільовій вікі перевірте червоні посилання під «Templates used on this page:», що знаходиться під вікном редагування. Якщо такs посилання там є, повторіть описані вище кроки і для цих сторінок, а також скопіюйте код модулів.

Після успішного імпорту шаблону та всіх пов'язаних з ним шаблонів з іншої вікі, відредагуйте його у цільовій вікі, налаштувавши його відповідно до ваших потреб. Наприклад, можна змінити логотип, вилучити даремні категорії чи червоні посилання.

Розширення

Розширення ParserFunctions часто використовується в шаблонах. Зайдіть на сторінку Розширення:ParserFunctions і перевірте, чи використовує скопійований вам шаблон будь-які з цих функцій. Якщо так, вам слід встановити розширення ParserFunctions . Для цього знадобиться доступ системного адміністратора до сервера, на якому розміщено вашу вікі.

Інша залежність, яку ви часто побачите в шаблонах, особливо у Вікіпедії, — це Lua. Команда {{#invoke: }} у коді шаблону є характерним показником. Якщо вона присутня, слід встановити розширення Scribunto , для чого знов-таки необхідний адміністративний доступ. Див. інструкції із встановлення та використання функцій на сторінці розширення.

Код CSS та JavaScript

Крім коду MediaWiki, багато які шаблони використовують CSS, а деяким для повноцінного функціонування потрібен JavaScript. Це може бути причиною неочікуваної поведінки скопійованого шаблону. Для того, щоб скопіювати необхідний код CSS або JavaScript, необхідний адміністративний доступ до цільової вікі, оскільки доведеться редагувати системні повідомлення з простору назв «MediaWiki:».

  1. Знайдіть у коді шаблону посилання на клас CSS (типовий вигляд — class="foobar"). Якщо ці класи визначено в «MediaWiki:Common.css» або в «MediaWiki:Monobook.css» оригінальної вікі, скопіюйте ці класи до «MediaWiki:Common.css» цільової вікі та перевірте функціонування шаблону.
  2. Якщо функціональність шаблону все ще не відновлено, перевірте наявність коду в «MediaWiki:Common.js» та «MediaWiki:Monobook.js» в оригінальній вікі. Якщо він є, можете спробувати скопіювати його до «MediaWiki:Common.js» цільової вікі. Зазвичай вам слід копіювати такий код лише з довірених джерел, і навіть тоді спочатку переглянути код, спробувавши виділити частини, що можуть стосуватися вашого шаблону. Варто звертати увагу на коментарі, які можуть пояснити функціонування кожної частини.

Redirection

If a page uses a redirect as a template, the redirect is resolved before processing the template and the target is used instead. This won't work if the target doesn't exist (a broken redirect), or is itself a redirect (a double redirect).

A page that just includes another page as a template might look like a redirect, but there are several differences between them:

  • The header of the result displays the title of the page it came from.
  • No "Redirected from" message is shown.
  • Buttons like edit, watch, talk, history, "what links here," and "last modified" point to the referring page. To access the target page, use a section edit link and navigate from there.
  • Unless includeonly and/or noinclude tags are used, the referring page shares the same categories as the target page.
  • "Double redirects" work when one or both are this type of pseudo-redirect.
Embedding works on pages that support redirects and doesn't work on pages without it.

Parser functions

Основна сторінка: Help:Parser functions

MediaWiki also supports parser functions, which function similarly to templates but follow slightly different syntax:

  • Parser functions utilize a ":" instead of the initial "|".
  • An edit page does not display parser functions used on that page.
  • There is no "What links here" feature for parser functions to identify the pages where they are utilized.
  • Parser functions templates do not generally accept named parameters, so equal signs generally have no special significance. For example:
{{ #if: not blank | x=abc }} gives x=abc

Див. також

General template usage

Special constructs used in templates

Other relevant information

Посилання