Перейти к содержанию
Главное меню
Главное меню
переместить в боковую панель
скрыть
Навигация
Заглавная страница
Указатели
Свежие правки
Случайная страница
Справка по MediaWiki
Народные Сказки
Поиск
Найти
Создать учётную запись
Войти
Персональные инструменты
Создать учётную запись
Войти
Страницы для неавторизованных редакторов
узнать больше
Вклад
Обсуждение
Редактирование:
РуСказки:Механизм шаблонов
(раздел)
О проекте
Обсуждение
русский
Читать
Править код
История
Инструменты
Инструменты
переместить в боковую панель
скрыть
Действия
Читать
Править код
История
Общие
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
== Параметры == Параметры шаблона могут быть именованными или нумерованными. Синтаксис вызова шаблона и способ использования параметров в теле шаблона в этих двух случаях будут различаться:<br> * В первом случае — на странице с вызовом шаблона используются ''именованные'' параметры:<br> <code><nowiki>{{имя шаблона |имя параметра 1=значение параметра 1 |имя параметра 2=значение параметра 2}}</nowiki></code><br> В этом случае в теле шаблона (на странице шаблона) надо ссылаться на имя параметра: <code><nowiki>{{{имя параметра 1}}}</nowiki></code>, <code><nowiki>{{{имя параметра 2}}}</nowiki></code>.<br> * Во втором случае — на странице с вызовом шаблона используются параметры, не имеющие имени, которые автоматически нумеруются или явно ''нумерованные'' параметры:<br> <code><nowiki>{{имя шаблона |значение параметра 1 |значение параметра 2}}</nowiki></code> или <code><nowiki>{{имя шаблона |1=значение параметра 1 |2=значение параметра 2}}</nowiki></code><br> В этом случае в теле шаблона (на странице шаблона) надо использовать порядковый номер параметра <code><nowiki>{{{1}}}</nowiki></code>, <code><nowiki>{{{2}}}</nowiki></code>. Обратите внимание, что фигурные скобки вокруг имён параметров на странице шаблона должны быть ''тройными'' <code><nowiki>{{{</nowiki></code><code><nowiki>}}}</nowiki></code>. Параметры, присутствующие на странице с вызовом шаблона, но отсутствующие в теле шаблона (на странице шаблона), игнорируются. Именованные параметры чувствительны к регистру символов. При вызове шаблона выполняются два типа подстановок: * На странице вызова шаблона: имя шаблона в двойных фигурных скобках заменяется содержимым шаблона; * На странице шаблона: имя или номер параметра шаблона в тройных фигурных скобках заменяется значением параметра, полученного со страницы вызова. Параметром шаблона может быть ссылка на другую статью.<br> Пример работы шаблона.<br>[[Файл:Механизм шаблона 1.jpg|мини|400 пкс|Механизм работы шаблона]] Пусть, у нас есть страница шаблона '''Шаблон:Песенка''' и статья на странице '''Статья'''.<br> Пусть, у нас на странице '''Шаблон:Песенка''' записан текст: <source lang="text"> {{{1}}} — жу-жу-жу… </source> Если на странице редактирования '''Статья''' создать обращение к шаблону ''Песенка'' с параметром ''<nowiki>«Ля-ля-ля»</nowiki>'' <source lang="text"> {{Песенка|Ля-ля-ля}} </source> тогда на записанной странице '''Статья''' наш шаблон будет развёрнут в текст: <source lang="text"> Ля-ля-ля — жу-жу-жу… </source> Т. е. механизм работы шаблона следующий: на странице '''Статья''' из имеющегося шаблона <code><nowiki>{{Песенка|Ля-ля-ля}}</nowiki></code> считывается первый параметр (он находится после первого знака <code>|</code> и является простым текстом <code><nowiki>Ля-ля-ля</nowiki></code>); затем этот считанный параметр вставляется на странице '''Шаблон:Песенка''' вместо <code><nowiki>{{{1}}}</nowiki></code><br> После этого всё содержимое страницы шаблона ''Песенка'' с произведённой подстановкой <code><nowiki>Ля-ля-ля — жу-жу-жу…</nowiki></code> возвращается на страницу ''Статья'', заменяя собой место вызова шаблона <s><code><nowiki>{{Песенка|Ля-ля-ля}}</nowiki></code></s>. === Неопределённые и пустые значения параметров === Если в строке вызова шаблона с именованными или нумерованными параметрами параметр не получил значение, то он остаётся нераскрытым текстом: с именованными параметрами <code><nowiki>{{{параметр 1}}}</nowiki></code>, с нумерованными параметрами <code><nowiki>{{{1}}}</nowiki></code>. Параметр будет раскрыт в дальнейшем, если вызвавшая шаблон статья включается в другую, где этот параметр задан. Заметим, что вызов шаблона с именованными параметрами <code><nowiki>{{шаблон 1 |параметр 1= |параметр 2=а}}</nowiki></code> делает параметр «параметр 1» определённым, равным пустой строке. Вызов <code><nowiki>{{шаблон 1 |параметр 2=а}}</nowiki></code> задаёт параметр «параметр 2», «параметр 1» не определён. Аналогично для шаблона с нумерованными параметрами: вызов <code><nowiki>{{шаблон 2||а}}</nowiki></code> делает первый параметр определённым, равным пустой строке, вызов <code><nowiki>{{шаблон 2|2=а}}</nowiki></code>) задаёт второй параметр, первый параметр не определён. Когда код между вертикальными чертами содержит знак равенства (например, <code>а=б</code>), вызов шаблона <code><nowiki>{{шаблон |а=б |в}}</nowiki></code> не присвоит значение «а=б» нумерованному параметру «1», а создаст параметр «а» со значением «б»; а вот <code><nowiki>{{шаблон |1=а=б |2=в}}</nowiki></code> всё сделает правильно. Единственный минус в том, что при вызове шаблона приходится нумеровать все параметры шаблона, если нумеруется хотя бы один. Для вставки символа равенства в значение параметра можно использовать HTML ссылку на этот символ ({{Lang-en|character reference}})<ref>https://html.spec.whatwg.org/#syntax-charref</ref>, записав <code>&equals;</code> <code>&#61;</code>, или же использовать шаблон {{tp|=}}, вставляющий символ «=» <code><nowiki>{{шаблон |a{{=}}b}}</nowiki></code>. === Условное значение параметра === Чтобы не появлялся нераскрытый текст параметра с незаданным значением, используют ''условное значение'' параметра в тексте шаблона. <br> Именованный или нумерованный параметр ''параметр'' внутри шаблона записывается в форме <code><nowiki>{{{параметр|альтернативный текст}}}</nowiki></code>. Если в вызове шаблона значение параметра не задано <code><nowiki>|параметр = </nowiki></code>, то при раскрытии шаблона вместо значения параметра будет подставлен альтернативный текст.<br> Если альтернативный текст пустой <code><nowiki>{{{параметр|}}}</nowiki></code>, используется пустое значение, то есть в месте параметра никакой текст выводиться не будет. В зависимости от значения параметра шаблона в текст статьи можно вставлять фрагменты. Для этой цели в тексте шаблона используются [[РуСказки:Функции парсера|функции парсера]], многие из которых являются частными случаями условного оператора: <code><nowiki>{{#if}}</nowiki></code> (также поддерживается <code><nowiki>{{#если}}</nowiki></code>) и другие. Синтаксис функции <code><nowiki>{{#if}}</nowiki></code> выглядит так: {{#if: ''проверяемый параметр'' | ''текст, когда значение параметра заполнено'' | ''текст, когда значение параметра пустое'' }} ''Текст, когда значение параметра пустое'', не является обязательным, поэтому можно использовать сокращённую форму: {{#if: ''проверяемый параметр'' | ''текст, когда значение параметра заполнено'' }} Если проверяемый параметр шаблона записан в форме <code><nowiki>{{{параметр}}}</nowiki></code>, то непустое значение параметра означает: либо его значение задано непустым при вызове шаблона, либо оно не задано и остаётся неопределённым (и если вывести его на страницу, то мы так и получим: {{{параметр}}}). То есть мы не можем понять, задано значение параметра или нет. Чтобы иметь возможность вызывать шаблон с меньшим количеством параметров, чем в тексте шаблона, и чтобы незаданные параметры игнорировались, параметры в теле шаблона записываются в форме <code><nowiki>{{{параметр|}}}</nowiki></code>. Если при вызове шаблона задано непустое значение параметра, то оно будет использоваться. В противном случае используется условное значение параметра ''пусто''. Пример использования условного значения ''пусто'' для параметра ''sample'': <pre> {{#if: {{{sample|}}} | параметр '''sample''': задано непустое значение! | параметр '''sample''': значение не задано или задано пустое значение! }} </pre> Реальный пример использования функции парсера <code><nowiki>{{#if}}</nowiki></code>, которая является частным случаем условного оператора, можно найти в коде шаблона {{Tl|Userbox/Fidonet}}. ==== Эффект пустых строк ==== Пусть нужно вывести имена параметров с заданными значениями в виде текста, а имена параметров, значения которых не заданы или пустые, не выводить. Для этого будем использовать условный оператор в сокращённой форме: <pre> {{#if: {{{sample1|}}} | '''sample1'''! }} {{#if: {{{sample2|}}} | '''sample2'''! }} {{#if: {{{sample3|}}} | '''sample3'''! }} </pre> Если все значения параметров заданы и не пустые, то результаты условных операторов выстраиваются в одну строку. Если значение второго параметра не задано или задано пустым, то между первым и третьим результатом появляется пустая строка. Такой же эффект даёт вариант со вторым оператором в полной форме: <code><nowiki>{{#if: {{{sample2|}}} | '''sample2'''!| |}}</nowiki></code>. Такое действие условного оператора позволяет увидеть по пустым строкам, что не все значения параметров заданы. Однако, если шаблон используется для последовательной вставки фрагментов текста, текст будет выглядеть разорванным. Тот же пример, но второй условный оператор в полной форме и выводит неразрывный пробел. Результаты выводятся в строку: <pre> {{#if: {{{sample1|}}} | '''sample1'''! }} {{#if: {{{sample2|}}} | '''sample2'''! |{{Nobr|}} }} {{#if: {{{sample3|}}} | '''sample3'''! }} </pre> Тот же пример, но второй условный оператор в сокращённой форме и после него стоит неразрывный пробел. Результаты также выводятся в строку: <pre> {{#if: {{{sample1|}}} | '''sample1'''! }} {{#if: {{{sample2|}}} | '''sample2'''! }}{{Nobr|}} {{#if: {{{sample3|}}} | '''sample3'''! }} </pre> Примеры реализованы в таблице: {|class="wikitable" ! width="12%"|Варианты !Код при вызове шаблона !Код !Результат |- |Значения параметров заданы | <pre> |sample1=sample1 |sample2=sample2 |sample3=sample3 </pre> | <pre> {{#if: {{{sample1|sample1}}} | '''sample1'''! }} {{#if: {{{sample2|sample2}}} | '''sample2'''! }} {{#if: {{{sample3|sample3}}} | '''sample3'''! }} </pre> | {{#if: {{{sample1|sample1}}} | '''sample1'''! }} {{#if: {{{sample2|sample2}}} | '''sample2'''! }} {{#if: {{{sample3|sample3}}} | '''sample3'''! }} |- |rowspan="4"| Значение второго параметра не задано |rowspan="4"| <pre> |sample1=sample1 |sample2= |sample3=sample3 </pre> | <pre> {{#if: {{{sample1|sample1}}} | '''sample1'''! }} {{#if: {{{sample2|}}} | '''sample2'''! }} {{#if: {{{sample3|sample3}}} | '''sample3'''! }} </pre> | {{#if: {{{sample1|sample1}}} | '''sample1'''! }} {{#if: {{{sample2|}}} | '''sample2'''! }} {{#if: {{{sample3|sample3}}} | '''sample3'''! }} |- | <pre> {{#if: {{{sample1|sample1}}} | '''sample1'''! }} {{#if: {{{sample2|}}} | '''sample2'''! |{{Nobr|}} }} {{#if: {{{sample3|sample3}}} | '''sample3'''! }} </pre> | {{#if: {{{sample1|sample1}}} | '''sample1'''! }} {{#if: {{{sample2|}}} | '''sample2'''!|{{Nobr|}} }} {{#if: {{{sample3|sample3}}} | '''sample3'''! }} |- | <pre> {{#if: {{{sample1|sample1}}} | '''sample1'''! }} {{#if: {{{sample2|}}} | '''sample2'''! }}{{Nobr|}} {{#if: {{{sample3|sample3}}} | '''sample3'''! }} </pre> | {{#if: {{{sample1|sample1}}} | '''sample1'''! }} {{#if: {{{sample2|}}} | '''sample2'''! }}{{Nobr|}} {{#if: {{{sample3|sample3}}} | '''sample3'''! }} |- | <pre> {{#if: {{{sample1|sample1}}} | '''sample1'''! }}{{Nobr|}} {{#if: {{{sample2|}}} | '''sample2'''! }}{{Nobr|}} {{#if: {{{sample3|sample3}}} | '''sample3'''! }}{{Nobr|}} </pre> | {{#if: {{{sample1|sample1}}} | '''sample1'''! }}{{Nobr|}} {{#if: {{{sample2|}}} | '''sample2'''! }}{{Nobr|}} {{#if: {{{sample3|sample3}}} | '''sample3'''! }}{{Nobr|}} |} Пустая строка между первой и третьей строкой появилась из-за того, что условный оператор во второй строке вывел два перевода строки вместо пустого значения и результат обработки условными операторами принял следующий вид: '''sample1'''! <small>(пустая строка)</small> '''sample3'''! Если один перевод строки подавлен, например, малым неразрывным пробелом <code><nowiki>{{Nobr|}}</nowiki></code>, то условный оператор во второй строке не выводит ни одного перевода строки и весь результат обработки выводится в строку: '''sample1'''!{{Nobr|}} '''sample3'''! Эффект пустых строк может проявляться в шаблонах-карточках, когда на месте неопределённых параметров появляются пустые строки. Чтобы этого не происходило нужно исключать перевод строки между условными операторами. Этого можно добиться не только описанными выше, но и способами, исключающими все (и это обязательно!) переводы строки между условными операторами. Примеры реализованы в таблице: {|class="wikitable" !width="12%"|Способ !width="76%"|Код !width="12%"|Результат |- |Писать все условные операторы в одну строку | <code><nowiki> {{#if: {{{sample1|sample1}}} | '''sample1'''! }}{{#if: {{{sample2|}}} | '''sample2'''! }}{{#if: {{{sample3|sample3}}} | '''sample3'''!}}</nowiki></code> | {{#if:{{{sample1|sample1}}}|'''sample1'''!}}{{#if:{{{sample2|}}}|'''sample2'''!}}{{#if:{{{sample3|sample3}}}|'''sample3'''!}} |- |Включать комментарии для исключения знака переноса | <pre> {{#if: {{{sample1|sample1}}} |'''sample1'''! }}<!-- разделитель -->{{#if: {{{sample2|}}} |'''sample2'''! }}<!-- разделитель -->{{#if: {{{sample3|sample3}}} |'''sample3'''! }}</pre> | {{#if: {{{sample1|sample1}}} |'''sample1'''! }}<!-- разделитель -->{{#if: {{{sample2|}}} |'''sample2'''! }}<!-- разделитель -->{{#if: {{{sample3|sample3}}} |'''sample3'''! }} |- |Делать переносы внутри условных операторов, а не между ними | <pre> {{ #if: {{{sample1|sample1}}} | '''sample1'''! }}{{ #if: {{{sample2|}}} | '''sample2'''! }}{{ #if: {{{sample3|sample3}}} | '''sample3'''! }}</pre> | {{ #if: {{{sample1|sample1}}} | '''sample1'''! }}{{ #if: {{{sample2|}}} | '''sample2'''! }}{{ #if: {{{sample3|sample3}}} | '''sample3'''! }} |} === Вики-разметка и перенос строк в параметрах === {{Якорь|Вики-разметка в параметрах}} Будьте аккуратны с вики-разметкой около параметров. Вики-разметка в шаблоне может взаимодействовать с вики-разметкой внутри параметра и вики-разметкой текста, окружающего шаблон. Например, для <code><nowiki>''<span>{{{1}}}</span>''</nowiki></code> и <code><nowiki>|1=''текст''</nowiki></code> получим <code><nowiki><i><span></i>текст<i></span></i></nowiki></code> — разрыв span. Для <code><nowiki>''{{{1}}}''</nowiki></code> и <code><nowiki>|1=''текст''</nowiki></code> получим <code><nowiki><i></i>текст<i></i></nowiki></code> — некорректное использование разметки: должна давать курсив, но тут она его лишает. Соответственно и обратные примеры, когда совпадающая вики-разметка есть в тексте до использования шаблона. Этого можно избежать, задавая [[CSS]]-правила тегам и теги i/b без вики-разметки, но проблемные варианты использования викиразметки всё ещё возможны — <code><nowiki>''{{Lang-en|1=''текст''}}''</nowiki></code> закроет теги раньше времени: <code><nowiki><i><span style="font-style:italic;"></span></i>текст<i></i></nowiki></code> вместо ожидаемого <code><nowiki><i><span style="font-style:italic;"><i>текст</i></span></i></nowiki></code>, тогда нужен поиск компромиссных вариантов по желаемому использованию. Параметр может приходить с переносом на новую строку. {| |вызов шаблона||шаблон||развёртка||html |- | <pre><nowiki> |param1=text1 |param2= </nowiki></pre> | <pre><nowiki>text '''{{{param1|no-text}}}'''. </nowiki></pre> | <pre><nowiki> text '''text1 '''. </nowiki></pre> | <pre><nowiki> text <b>text1</b> <p><b>.</b> </p> </nowiki></pre> |} Перевод строки пропадёт в случае <code><nowiki>|param1=text1|param2=</nowiki></code> или <code><nowiki>'''{{#if:{{{param1|}}}|{{{param1|}}}|no-text}}'''</nowiki></code>. Пустой параметр <code><nowiki>{{шаблон|}}</nowiki></code> может схлопнуть вики-разметку <code><nowiki>'''{{{1|}}}'''.</nowiki></code>, которая неправильно развернётся - <code><nowiki>''''''.</nowiki></code> - <code><nowiki>'<b><i>.</i></b></nowiki></code>. Беспроблемный вариант <code><nowiki>{{#if:{{{1|}}}|'''{{{1}}}'''}}</nowiki></code>.
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «Народные Сказки» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
РуСказки:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
Отменить
Справка по редактированию
(в новом окне)
Отобразить/Скрыть ограниченную ширину содержимого