Help:Шаблони

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page Help:Templates and the translation is 89% complete.
Outdated translations are marked like this.
Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎Lëtzebuergesch • ‎Napulitano • ‎Nederlands • ‎Tagalog • ‎Tiếng Việt • ‎Türkçe • ‎Zazaki • ‎català • ‎dansk • ‎español • ‎français • ‎hrvatski • ‎italiano • ‎lietuvių • ‎polski • ‎português • ‎português do Brasil • ‎română • ‎slovenčina • ‎suomi • ‎svenska • ‎čeština • ‎беларуская (тарашкевіца)‎ • ‎български • ‎русский • ‎српски / srpski • ‎українська • ‎עברית • ‎اردو • ‎العربية • ‎سنڌي • ‎فارسی • ‎پښتو • ‎ߒߞߏ • ‎भोजपुरी • ‎हिन्दी • ‎বাংলা • ‎ಕನ್ನಡ • ‎മലയാളം • ‎ไทย • ‎中文 • ‎日本語 • ‎ꯃꯤꯇꯩ ꯂꯣꯟ • ‎한국어
PD Зверніть увагу! Коли Ви редагуєте цю сторінку, то погоджуєтесь робити свій внесок під ліцензією CC0. Детальніше про умови ліцензії можна дізнатися на сторінці довідки.
PD

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

Створення шаблону

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

Найпростіший приклад застосування шаблону. Якщо створити сторінку "Template:Welcome", на якій записано:

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

то ця сторінка буде шаблоном. Тепер її включення за допомогою такого коду:

{{Welcome}}

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

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

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

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

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

Використання

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

  • {{Назва}} - як описано вище, таке посилання буде замінено поточним вмістом сторінки [[Template:Назва]] при кожному перегляді сторінки. Рушій MediaWiki залишає це посилання в вікі-тексті сторінки незмінним.
  • {{subst:Назва}} — при використанні такого посилання на шаблон його буде раз і назавжди замінено вмістом [[Шаблон:Назва]] станом на час збереження сторінки з посиланням: копія вмісту [[Шаблон:Назва]] замінить посилання на шаблон. Тоді вміст є частиною включеної сторінки, і його можна редагувати на сторінці звичайним чином. Увага: пізніші зміни початкового коду сторінки шаблону не розмножуються на сторінку з посиланням на шаблон.
  • {{safesubst:Назва}} - ця конструкція поводить себе точно так, як і subst:, різниця виникає лише коли вона зустрічається всередині іншого шаблону і цей шаблон або вставляють (за першою схемою), або прямо переглядають.
  • {{msgnw:Назва}} включає шаблон у формі без вікі-форматування (так само, як це робить <nowiki>) при перегляді сторінки.

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

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

Якщо такого простору імен не існує, назву буде доповнено простором імен Template:

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

Параметри

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

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

Спасибі... за вашу працю. жму руку, Я

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

Подяка, висловлена за допомогою цього шаблону Template:Thankyou, матиме однаковий вигляд, але міститиме різні фрагменти тексту - ті самі, що при кожному використанні було передано шаблону як параметри. Знехтувавши кодом форматування рамки та зображення, звернемо увагу на змістовний в даному контексті фрагмент шаблону: Although the note should look similar whenever a user thanks another user, its specific contents (i.e. the reason and the signature) will be different. For that reason, you should pass them as parameters. If we ignore the remaining elements to format the box and place the image, the core content of the template will be this:

'''Спасибі...'''
за {{{1}}}.
жму руку, {{{2}}}

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

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

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

Анонімні (за програмістською термінологією, позиційні) параметри просто перелічують послідовно один за одним:

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

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

Спасибі... за вашу працю. жму руку, Я

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

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

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

Спасибі... за Я. жму руку, вашу працю

визначення параметрів за порядковим номером (за допомогою {{{1}}} тощо) працює лише для анонімних параметрів. Будь-які параметри, визначені за іменем, як показано нижче, не будуть доступними для шаблону за допомогою порядкових номерів.
Якщо знак дорівнює з'являється всередині аргументу анонімного параметру шаблону, цей параметр може хибно тлумачитися як іменований (що пояснено нижче у цьому документі), розглядаючи текст до знаку дорівнює як ім'я параметру, а після знаку — як його значення. Це поширена проблема, коли треба включити зовнішнє посилання чи елемент HTML із атрибутами (див. task T16235). Обхідним шляхом є використання натомість іменованих параметрів або навіть нумерованих, як пояснено в наступному розділі.

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

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

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

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

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

за додаючи “=”. жму руку, Я

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

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

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

'''Спасибі...'''
за {{{причина}}}.
жму руку, {{{підпис}}}

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

{{Thankyou|підпис=Я|причина=те, що ви є}}

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

Спасибі... за бути тим, ким є. жму руку, Я

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

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

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

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

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

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

{{Thankyou}}

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

Спасибі... за {{{1}}}. жму руку, {{{2}}}

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

'''Спасибі...'''
за {{{причина|все}}}.
жму руку, {{{підпис|Я}}}

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

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.

Evaluation

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. First of all, 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.

The second consequence of this is dead-code elimination. If you make a template call like {{ #foreach: foo$n$_bar | foo$n$_bar = {{{foo$n$_bar}}}
}}
, and Template:Foo does not contain {{{1}}}, then the displaytitle is not used, since it is only evaluated when needed, and it 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.

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 зупинятиме рекурсію з жирною назвою шаблону. Наприклад, якщо вмістом «Шаблон:Aaaa» є «{{Aaaa}}», він показуватиметься як «Template:Aaaa». і відображатиме Виявлено петлю шаблонів: Шаблон:Aaaa.

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

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

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

  • Посилання категорій, до яких віднесений сам шаблон
  • Міжмовні посилання на той самий шаблон іншими мовами
  • Пояснювальний текст про використання шаблону

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

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

Будь-який текст поза межами теґів <noinclude> та <includeonly> обробляється та відображується за звичайними правилами, тобто як при перегляді сторінки шаблону, так і при включенні шаблону до іншої сторінки. 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. The focus is on what is outside this tag.

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

The three partial transclusion tags enable all possible combinations of what is processed and rendered. Comments also fill a role.

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

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

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

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

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

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

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

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

A template page can be linked to like any other wiki page. For example, the link Template:Navbar is generated using the wikicode {{ll|Template:Navbar|Template:Navbar}}.

On many wikis, Template:Tl can be used to provide a link to a template formatted in a way that shows the "double curly-braces" wikicode necessary to transclude the template without actually doing the tranclusion. For example, the code {{tl|Navbar}} may be used to create the link {{Navbar}}.

This construct is commonly used in template documentation, on help pages, and on talk pages when referring to templates. The same effect can be achieved by using {{Navbar}}, but the {{tl}} approach involves much less typing. On any given wiki the Tl template, if it exists, may or may not render the text in a "code" element, as shown here. If not, another similarly named template may do so. See, for example, the "See also" section of the documentation of en:Template:Tl at the English Wikipedia.

Копіювання з одного вікі-проекту до іншого

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

Код MediaWiki

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

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

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

  1. Перейдіть до сторінки необхідного шаблону, потім до сторінки його редагування, звідки скопіюйте весь вікітекст
  2. На цільовому проекті перейдіть до створення/редагування сторінки з такою самою назвою, як сторінка шаблону, текст якого ви скопіювали. Вставте скопійований вікітекст. В короткий опис змін нового шаблону запишіть посилання на його оригінал.
  3. На сторінці редагування шаблону оригінального вікі-проекту, нижче вікна редагування, знайдіть перелік "Templates used on this page:". Для кожного шаблону з цього переліку відтворіть інструкції, описані вище. Зробіть так само для шаблонів, використовувані шаблонами з цього переліку, і так далі.

В такий спосіб буде скопійовано весь необхідний код, і цього виявиться досить для багатьох шаблонів. Якщо це не спрацює, на цільовому вікі-проекті перевірте червоні посилання під "Pages transcluded onto the current version of this page:", що знаходиться під вікном редагування. Якщо таки посилання там є, повторіть описані вище кроки і для цих сторінок, а також скопіюйте код у модулі.

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

Розширення

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

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

Код CSS та JavaScript

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

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

Див. також

Посилання