Help:Шаблоны

From MediaWiki.org
Jump to: navigation, search
This page is a translated version of the page Help:Templates and the translation is 67% complete.

Other languages:
العربية • ‎جهلسری بلوچی • ‎беларуская (тарашкевіца)‎ • ‎български • ‎भोजपुरी • ‎català • ‎čeština • ‎Deutsch • ‎Zazaki • ‎English • ‎British English • ‎español • ‎فارسی • ‎suomi • ‎français • ‎עברית • ‎हिन्दी • ‎Bahasa Indonesia • ‎italiano • ‎日本語 • ‎한국어 • ‎Lëtzebuergesch • ‎lietuvių • ‎मैथिली • ‎Napulitano • ‎Nederlands • ‎polski • ‎پښتو • ‎português • ‎português do Brasil • ‎română • ‎русский • ‎slovenčina • ‎српски / srpski • ‎தமிழ் • ‎Tagalog • ‎Türkçe • ‎українська • ‎اردو • ‎Tiếng Việt • ‎中文
PD Внимание: Когда вы редактируете эту страницу, вы соглашаетесь на передачу своего вклада по лицензии CC0. Узнать об этом подробнее можно на странице справки.
PD

Шаблоны MediaWiki полезны для размещения одинаковых стандартных элементов (текста или форматирования) в других страницах. В отличие от расширений и медиафайлов, для шаблонов нет центрального хранилища (репозитория). Шаблоны могут быть написаны с нуля или, чтобы не делать двойную работу, взяты из другой вики, например, из Википедии, и затем сохранены в целевой вики.

Создание шаблонов[edit]

Шаблоны — это обычные вики-страницы, с той разницей, что их названия начинаются с префикса «Шаблон:» («Template:»), поэтому их можно создавать так же как обычные страницы.

Пример простейшего шаблона. Если Вы создадите страницу с названием "Template:Welcome" с содержимым:

Привет! Добро пожаловать в вики!

то вы создадите ваш первый шаблон! Если теперь используете код:

{{Welcome}}

в любой другой странице, то эта страница будет содержать текст "Hello! Welcome to the wiki.", в том месте где вы использовали код {{Welcome}}. Таким образом, содержимое шаблона встроилось в другую страницу.

Вы можете вставить {{Welcome}} в любом месте любой страницы когда захотите приветствовать кого-либо. Допустим, вы применили этот код на 100 страницах. Если теперь поменять содержимое шаблона на:

Привет всем! Добро пожаловать в этот замечательный вики-проект.

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

Это основной способ. Есть несколько дополнительных особенностей использования, которые дополняют этот способ и делают шаблоны очень полезными.

Использование[edit]

Шаблоны — это вики-страницы, используемые в других вики-страницах. Доступных способов использования три:

  • {{Name}} добавляет в страницу копию содержимого шаблона (страницы с именем [[Template:Name]]). Обращение к шаблону производится каждый раз, когда производится извлечение использующей его страницы. Таким образом, если изменить шаблон, то отображение использующих его страниц тоже изменится.
  • {{subst:Name}} заменяет данную строку содержимым шаблона в момент сохранения страницы. Таким образом, после сохранения в ней остается копия шаблона, которую можно будет изменять так же, как обычную вики-разметку. После сохранения шаблон и страница редактируются независимо: изменение страницы не влияет на шаблон, изменение шаблона не влияет на страницу. Замечание: не стоит пользоваться данным способом, если вы хотите, чтобы дальнейшие изменения шаблона отображались в использующих его страницах.
  • {{safesubst:Name}} — это понятие было введено, чтобы позволить замены, без нарушения содержимого см w:en:Help:Substitution#The safesubst: modifier.
  • {{msgnw:Name}} включает шаблон в виде формы, отображающейся в использующей его странице, аналогично тому как действует тэг <nowiki>. Как и в первом случае, изменение шаблона изменяет то, что мы видим при отображении страницы.

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

  • {{Шаблон:Pagename}} содержит [[Шаблон:Pagename]]
  • {{Foo:ИмяСтраницы}} содержит [[Foo:ИмяСтраницы]]
  • {{:ИмяСтраницы}} содержит [[ИмяСтраницы]]
    • {{subst::ИмяСтраницы}} заменяет себя содержимым [[ИмяСтраницы]]

Если нет такого пространства имен не существует, то полное название предполагает, что это шаблон:

  • {{Foo:Bar}} содержит [[Шаблон:Foo:Bar]]

Параметры[edit]

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

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

Example sunflower image
A little thank you...
for all your effort.
hugs, Me


Спасибо за внимание появится повод (в данном случае "все ваши усилия") и подпись ("Подпись"). Ваша цель состоит в том, что любой пользователь может поблагодарить другого пользователя, по любой причине.

Так, что записка будет видна везде он используется, вы можете определить шаблон под названием Шаблон:Слова благодарности, например. Хотя записка должна появляться каждый раз, когда один пользователь благодарит другого пользователя, его конкретное содержание (т. е. сообщение и подпись) будут разными. По этой причине, вы должны передать их в качестве параметров. Если мы игнорируем остальные элементы форматирования окна и добавим изображение, то содержание шаблона будет таким:

'''Спасибо...'''
для {{{1}}}.
обнимаю, {{{2}}}

Обратите внимание на использование переменных {{{1}}} и {{{2}}}. Это способ определить, в шаблоне, параметры, которые будут передаваться при использовании шаблона. Обратите внимание, что в шаблоне, каждый параметр находится в окружении "'три"' фигурные скобки: {{{ }}}. Это отличается от обычного использования имени шаблона .

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

Нумерованные (анонимные) параметры[edit]

Чтобы передать в параметры в шаблон анонимно, последовательно запишите список значений этих параметров:

{{Thankyou|все ваши усилия|Подпись}}

В этом случае, {{Thankyou}} шаблон получает параметры {{{1}}}=все ваши усилия и {{{2}}}=Подпись, производит:

Example sunflower image
A little thank you...
for все ваши усилия.
hugs, Подпись


Порядок в котором анонимные параметры передаются в шаблон, критичны для поведения. Передача параметров шаблону в таком порядке:

{{Thankyou|Подпись|все ваши усилия}}

будет приводить к следующему результату:

Example sunflower image
A little thank you...
for Подпись.
hugs, все ваши усилия


Примечание: определение параметров заказа (с {{{1}}}, и т.д.) работает "только" с анонимными параметрами. Если Вашу страницу определяет номер или имя параметра, как показано ниже, этот способ перестанет быть доступным для шаблона, который их получает.

Примечание: если знак равенства будет использован внутри анонимного параметра шаблона, его посчитают в качестве именованного параметра, текст перед знаком равенства будет определён как название параметра, а текст после знака равно как значение параметра. Это распространенная проблема, когда необходимо включить внешнюю ссылку или элемент HTML с атрибутами (см. Task 16235) Обходной путь заключается в использовании вместо именованных параметров, или нумерованных параметров, способ описанный в следующем разделе.

Шаблон с нумерованными параметрами[edit]

Чтобы передать параметры по номеру, определите каждый параметр при передаче:

{{Thankyou|2=Подпись|1=ваш друг}}

В этом случае, шаблон {{Thankyou}} принимает параметры {{{1}}}=ваш друг и {{{2}}}=Подпись, хотя они были поставлены в обратном порядке, и получается: Template:Спасибо

Шаблон с именованными параметрами[edit]

Третий способ передачи параметров по имени, вместо цифр. В этом случае содержимое шаблона будет изменен на:

'''Большое спасибо...'''
за {{{reason}}}.
Обнимаю, {{{signature}}}

В пределах шаблона, то используйте {{{reason}}} и {{{signature}}} для определения каждого параметра, вместо числа. Для передачи этих параметров по имени, определите каждый параметр при передаче:

{{Thankyou|signature=Подпись|reason=за то что ты есть}}

В этом случае шаблон {{Thankyou}} принимает параметры {{{reason}}}=все ваши усилия и {{{signature}}}=Подпись и производит:

Example sunflower image
A little thank you...
for ваши усилия.
hugs, Подпись

Преимущество использования именованных параметров в шаблоне, -гибкость в выборе параметров которые могут быть переданы, кроме того, это делает код шаблона намного легче для понимания, особенно если параметров много.

Значения по умолчанию[edit]

Если вы включите шаблон, который ожидает параметры, но не предоставляют их, таким образом:

{{Thankyou}}

в нумерованных параметрах из примера выше Вы получите следующее:

Example sunflower image
A little thank you...
for {{{1}}}.
hugs, {{{2}}}


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

'''Большое спасибо...'''
за {{{reason|чтото}}}.
обнимаю, {{{signature|Подпись}}}

then {{{reason|everything}}} defines that if no parameter {{{reason}}} is provided, then the value everything will be used. Similarly, {{{signature|Me}}}, defaults parameter {{{signature}}} to value Me. Now, transcluding the template again without passing any parameter, results in the following:

Example sunflower image
A little thank you...
for everything.
hugs, Me

Order of evaluation[edit]

Template parameters are fully evaluated before they are passed to the template. So if one of your parameters is a call to another template, what is actually passed is the expanded parameter.

{{Thankyou|reason=visiting ({{Welcome}})|signature=Me}}

becomes

{{Thankyou|reason=visiting (Hi there! Welcome to this wonderful wiki.)|signature=Me}}

before it becomes:

Example sunflower image
A little thank you...
for visiting (Hi there! Welcome to this wonderful wiki.).
hugs, Me


In a few circumstances, this order of evaluation makes a difference from the alternative. (The alternative being to check the results of the template call to see if there are additional templates to be expanded.)

First, the name of the template can be expanded at the same time and in the same way as the parameters.

Thus

{{Thankyou in {{preferred language}}|signature=Me}}

might expand to

{{Thankyou in french|signature=Me}}

So that a template called Thankyou in french could display the thank you in the preferred language (however that was determined.)

Secondly, the template being called can't construct a template from pieces to be called later. A template that took the form {{start of call}}{{end of call}} would not work if start of call was {{Thankyou| and end of call was signature=Me}}.

Thirdly, the parameter being passed is expanded only once, rather than every place the parameter is used in the template. This is more efficient on the mediawiki server.

Finally, the template being called can't stop the parameter from being expanded altogether. Even if a template only uses a parameter in some circumstances, it will always have been expanded before the call was made.

Управление включением шаблонов[edit]

Тем, какая часть шаблона будет включаться в страницу, можно управлять с помощью тэгов <noinclude> и <includeonly>.

Всё что находится между <noinclude> и </noinclude> будет обрабатываться и отображаться только если страница шаблона просматривается сама по себе. Возможное применения данной возможности следующие:

Противоположным образом работает тэг <includeonly>. Текст, находящийся между <includeonly> и </includeonly> будет обрабатываться и отображаться только когда страница шаблона включена в другую страницу.

  • Очевидным применением этого является добавление всех страниц, содержащих данный шаблон, к категории, без добавления самого шаблона в эту категорию. Замечание: Когда вы изменяете категории, добавляемые в страницу с использованием шаблонов, категоризация может не сработать сразу, так как она управляется очередью задач.
  • Ensuring that the template's code is not executed when viewing the template page itself. Typically this is because it expects parameters, and its execution without parameters has an undesired result.

Everything outside <noinclude> and <includeonly> is processed and displayed normally; that is, both when the template page is being viewed directly and when the template is included in another page. The focus is on what is inside these two tags.

Everything outside <onlyinclude> tags is discarded in the transclusion. Even sections tagged includeonly are discarded in the transclusion unless they are also tagged as onlyinclude. Акцент делается на то, что находится за пределами этого тега.

Три части включения тэгов позволит все возможные комбинации, что обрабатывается и отображается. Comments also fill a role.

Систематизация шаблонов[edit]

Для эффективного использования шаблонов нужно их легко находить и применять. Легче всего это обеспечить, поместив на страницу шаблона пример его использования.

To find them, users can:

  1. Click Спецстраницы > Все страницы
  2. In the Пространство имён: list, choose Template and click Выполнить.

Например такой:

<noinclude>
== Usage ==
Welcome users:
{{Thankyou|reason=your reason|signature=your signature}}
</noinclude>

Таким образом редактор сможет просто скопировать пример и модифицировать его для своих нужд.

Ссылки на шаблон[edit]

To link to a template instead of including it, use the {{tl}} template. The name of the template the editor wants to link to goes after the vertical pipe. Например: {{tl|navbar}} links to the {{navbar}} template.

Копирование из одной вики в другую[edit]

Templates often require CSS or other templates, so users frequently have trouble copying templates from one wiki to another. The steps below should work for most templates.

Код MediaWiki[edit]

If you have import rights (Specifically importupload) on the new wiki:

  1. Go to Special:Export on the original wiki, and download an .xml file with the complete history of all necessary templates, as follows:
    • Enter the name of the template in the big text box, e.g. "Template:Welcome". Pay special attention to capitalization and special characters — if the template name isn't exactly correct, the export may still occur but the .xml file will not have the expected data.
    • Check the box "Включить шаблоны".
    • Uncheck the box "Включать только текущую версию, без полной предыстории".
    • Click "Экспортировать".
  2. Go to Special:Import on the new wiki and upload the .xml file.

If you don't have import rights on the new wiki:

  1. Go to the template you want to copy from the original wiki. Go to the edit page, and copy all the wikitext
  2. 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.
  3. 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.

This will copy the entire code necessary, and will suffice for some templates. If it doesn't work also check for red links listed under "Pages transcluded onto the current version of this page:", below the edit box. If there are any repeat the above steps for these as well.

After sucessfully importing the template and all its linked templates from the other wiki, edit it to change customisations to suit your wiki. For example to change a logo, remove redundant categories or red links.

Расширения[edit]

An extension often used in templates is ParserFunctions. Visit page ParserFunctions and check if any of the functions listed there are used in the templates you've copied. If so, you have to install the ParserFunctions extension. To install it, you'll need system admin access to the server of your MediaWiki installation.

Another dependency that may be used in templates, especially those on Wikipedia, is Lua. Having {{#invoke: }} in template code is a good sign for it. In case it's used, you need to install the Scribunto extension and system admin access is required too. See that page for more instructions about installing and using the extension.

CSS и JavaScript-код[edit]

Besides MediaWiki code, many templates make use of CSS and some rely on JavaScript to work fully. If the copied templates are not behaving as expected, this may be the cause. To copy the required CSS and JavaScript to your wiki you'll normally need to have admin privileges, because you'll be editing system messages in the "MediaWiki:" namespace.

  1. Look for the use of CSS classes (text like class="foobar") in the template text. If those classes appear in "MediaWiki:Common.css" or "MediaWiki:Monobook.css" on the original wiki, copy those classes to "MediaWiki:Common.css" on the new wiki and check if the template is now fine.
  2. If the copied template is still not working as expected, check if there is code in "MediaWiki:Common.js" or "MediaWiki:Monobook.js" on the original wiki. If so, you can try copying it to "MediaWiki:Common.js" on the new wiki. Normally, it is a good idea to only copy code from trusted sources, and first browsing the code to identify and select the parts that are relevant. You may find comments that can serve as clues to identify the functionality of each part.

Замечание[edit]

An experiment shows that if you include a template in itself, it won't put MediaWiki into an infinite recursion. MediaWiki will find out, and stop with the template's name in bold. For example, if the content of "Template:Aaaa" is "{{Aaaa}}", it'll show as "Template:Aaaa".

См. также[edit]