Модуль:Transclude/doc: различия между версиями

Перейти к навигации Перейти к поиску
7899 байт добавлено ,  2 года назад
нет описания правки
(Новая страница: «{{СИШ}} {{module rating|p}} == Функции == === uni === {{#invoke:Transclude|uni|''имя шаблона''|''список параметров''…...»)
 
Нет описания правки
 
Строка 1: Строка 1:
{{docpage}}
{{TOC-right}}
{{СИШ}}
{{СИШ}}
{{module rating|p}}
{{module rating|p}}
== Функции ==
Этот модуль содержит функции, позволяющие вызывать внутренний шаблон из объемлющего шаблона после некоторой обработки параметров. Под объемлющим шаблоном имеется в виду шаблон, в котором написано <code><nowiki>{{#invoke:Transclude|...</nowiki></code>, например, {{t|Пиктограммы СГС}}. В вызове модуля указывается название функции и внутренний шаблон, вроде {{t|Пиктограммы СГС/основа}}, который собственно и обрабатывает аргументы, полученные от объемлющего шаблона.


=== uni ===
{{-}}
&#123;{#invoke:Transclude|uni|''имя шаблона''|''список параметров''…}}
{| class="wikitable"
! Функция
! Код объемлющего шаблона
! style="min-width:20em;" | Код его вызова
! style="min-width:20em;" | Результат
|-
| [[#call|call]]
| <code><nowiki>{{#invoke:Transclude|call|внутренний шаблон}}<br>дополнение</nowiki></code>
| <code><nowiki>{{объемлющий шаблон|1|2|3}}</nowiki></code>
| <code><nowiki>{{внутренний шаблон|1|2|3}}<br>дополнение</nowiki></code>
|-
| [[#forall|forall]]
| <code><nowiki>{{#invoke:Transclude|forall|внутренний шаблон}}</nowiki></code>
| <code><nowiki>{{объемлющий шаблон|1|2|3}}</nowiki></code>
| <code><nowiki>{{внутренний шаблон|1}}</nowiki><br><nowiki>{{внутренний шаблон|2}}</nowiki><br><nowiki>{{внутренний шаблон|3}}</nowiki></code>
|-
| [[#join|join]]
| <code><nowiki>{{#invoke:Transclude|join|<nowiki>, </now</nowiki><nowiki>iki>|<nowiki> и </now</nowiki><nowiki>iki>}}</nowiki></code>
| <code><nowiki>{{объемлющий шаблон|1|2|3}}</nowiki></code>
| <code><nowiki>1, 2 и 3</nowiki></code>
|-
| [[#npc|npc]]
| <code><nowiki>{{#invoke:Transclude|npc|внутренний шаблон|вверху=|внизу=}}</nowiki></code>
| <pre><nowiki>{{объемлющий шаблон
|вверху1 = 11
|внизу1  = 12


Унифицирует обращение к шаблону, преобразует все имена параметров к нижнему регистру и позволяет задавать удобные псевдонимы (вводить параметрами в нижнем регистре).
|вверху2 = 21
|внизу2  = 22
}}</nowiki></pre>
| <pre><nowiki>{{внутренний шаблон
|вверху = 11
|внизу  = 12
}}{{внутренний шаблон
|вверху = 21
|внизу  = 22
}}</nowiki></pre>
|-
| [[#cycle|cycle]]
| TODO
| TODO
| TODO
|}
== Методы ==
 
=== call ===
: <code><nowiki>{{#invoke:Transclude|call|</nowiki>''внутренний шаблон''<nowiki>}}</nowiki></code>
 
Вызывает внутренний шаблон с аргументами объемлющего шаблона (того, в коде которого указан #invoke). Нужно для того, чтобы дописать к выводу внутреннего шаблона что-то новое. Передаются как нумерованные, так и именованные аргументы.
 
Например, объемлющий шаблон с кодом
: <code><nowiki>{{#invoke:Transclude|call|внутренний шаблон}}<br>дополнение</nowiki></code>,
вызванный таким образом:
: <code><nowiki>{{объемлющий шаблон|1|2|3}}</nowiki></code>,
вернёт
: <code><nowiki>{{внутренний шаблон|1|2|3}}<br>дополнение</nowiki></code>.
 
Пример использования: [[Шаблон:TRef]].


=== forall ===
=== forall ===
&#123;{#invoke:Transclude|forall|''имя шаблона''}}
: <code><nowiki>{{#invoke:Transclude|forall|</nowiki>''внутренний шаблон''<nowiki>}}</nowiki></code>
: <code><nowiki>{{#invoke:Transclude|forall|</nowiki>''внутренний шаблон''<nowiki>|</nowiki>separator=''разделитель''<nowiki>|</nowiki>conjunction=''последний разделитель''<nowiki>}}</nowiki></code>


Вызывает заданный шаблон, передавая ему нумерованные параметры по-одному: сначала <code><nowiki>{{имя шаблона|1={{{1|}}}}}</nowiki></code>, потом <code><nowiki>{{имя шаблона|1={{{2|}}}}}</nowiki></code>, <code><nowiki>{{имя шаблона|1={{{3|}}}}}</nowiki></code> и т. д.
Вызывает внутренний шаблон, по одному передавая ему нумерованные параметры объемлющего шаблона (того, в коде которого указан #invoke). Параметры могут быть набраны в произвольном порядке и с пропусками, они будут отсортированы. Пустые параметры не пробрасываются.


Предполагается, что параметры введены подряд, при пропуске поведение не определено (TODO).
Например, объемлющий шаблон с кодом
: <code><nowiki>{{#invoke:Transclude|forall|внутренний шаблон}}</nowiki></code>,
вызванный таким образом:
: <code><nowiki>{{объемлющий шаблон|1|2|3}}</nowiki></code>,
вернёт
: <code><nowiki>{{внутренний шаблон|1}}{{внутренний шаблон|2}}{{внутренний шаблон|3}}</nowiki></code>.


=== escapeparams ===
Можно передать разделитель и последний разделитель через параметры ''separator'' и ''conjunction'', по умолчанию они пусты. Если указан только ''separator'', то ''conjunction'' заполняется из него. Например, объемлющий шаблон с кодом
&#123;{#invoke:Transclude|escapeparams|(зарезервировано автором?)
: <code><nowiki>{{#invoke:Transclude|forall|внутренний шаблон|separator=<nowiki>, </now</nowiki><nowiki>iki>|conjunction=<nowiki> и </now</nowiki><nowiki>iki>}}</nowiki></code>,
|''разделитель пар''|''альтернатива знаку равенства''
вызванный таким образом:
|''суффикс''}}
: <code><nowiki>{{объемлющий шаблон|1|2|3}}</nowiki></code>,
вернёт
: <code><nowiki>{{внутренний шаблон|1}}, {{внутренний шаблон|2}} и {{внутренний шаблон|3}}</nowiki></code>,
а объемлющий шаблон с кодом
: <code><nowiki>{{#invoke:Transclude|forall|внутренний шаблон|separator=<nowiki>, </now</nowiki><nowiki>iki>}}</nowiki></code>,
вызванный таким образом:
: <code><nowiki>{{объемлющий шаблон|1|2|3}}</nowiki></code>,
вернёт
: <code><nowiki>{{внутренний шаблон|1}}, {{внутренний шаблон|2}}, {{внутренний шаблон|3}}</nowiki></code>.


Возвращает параметры (вызывающего шаблона? --[[user:Incnis Mrsi|Incnis Mrsi]]) через «|» с заменой «=» на «{{tl|1==}}» и «|» на «{{tl|!}}». Параметры предусмотрены, но необязательны.
Если требуется, чтобы разделитель содержал пробел в начале или в конце, нужно заключить его в <code><now<nowiki>iki></now</nowiki>iki></code>.


Предполагается когда-то снабдить интеллектом для незамены палочек в вики-ссылках и сортировки.
Примеры использования:
* Простой: [[Шаблон:Пиктограммы СГС]] вызывает [[Шаблон:Пиктограммы СГС/основа]], см. [[Шаблон:Пиктограммы СГС/тесты]].
* Более продвинутый: [[Шаблон:Falseredirect]] вызывает [[Шаблон:Falseredirect/основа]], см. [[Шаблон:Falseredirect/тесты]].


<small>Назначение параметров f.args[2], f.args[3] и f.args[4] угадано участником Incnis Mrsi и может не соответствовать замыслу автора, исходная документация на них отсутствовала.</small>
=== join ===
: <code><nowiki>{{#invoke:Transclude|join|</nowiki>''разделитель''|''последний разделитель''<nowiki>}}</nowiki></code>
 
Берёт нумерованные аргументы объемлющего шаблона (того, в коде которого указан #invoke) и склеивает их в единую строку. Пустые аргументы пропускаются. Используются разделитель и последний разделитель, указанные первым и вторым параметрами в вызове модуля. Если указан только первый параметр, второй заполняется из него.
 
Например, объемлющий шаблон с кодом
: <code><nowiki>{{#invoke:Transclude|join|<nowiki>, </now</nowiki><nowiki>iki>|<nowiki> и </now</nowiki><nowiki>iki>}}</nowiki></code>,
вызванный таким образом:
: <code><nowiki>{{объемлющий шаблон|1|2|3}}</nowiki></code>,
вернёт
: <code><nowiki>1, 2 и 3</nowiki></code>,
а объемлющий шаблон с кодом
: <code><nowiki>{{#invoke:Transclude|join|<nowiki>, </now</nowiki><nowiki>iki>}}</nowiki></code>,
вызванный таким образом:
: <code><nowiki>{{объемлющий шаблон|1|2|3}}</nowiki></code>,
вернёт
: <code><nowiki>1, 2, 3</nowiki></code>.
 
Если требуется, чтобы разделитель содержал пробел в начале или в конце, нужно заключить его в <code><now<nowiki>iki></now</nowiki>iki></code>.
 
Фактически аналогичен использованию [[#forall]] с внутренним шаблоном с кодом <code><nowiki>1</nowiki></code> и другим способом указания разделителей.
 
Пример использования: [[Шаблон:Luaman]] и [[Шаблон:Luaman/тесты]] (TODO: заменить на более внятный пример).
 
См. также: [[Модуль:Separated entries]].


=== npc ===
=== npc ===
&#123;{#invoke:Transclude|npc|''имя шаблона 1''[|''имя шаблона 2''…]
: <code><nowiki>{{#invoke:Transclude|npc|</nowiki>''внутренний шаблон''<nowiki>|</nowiki>''параметр''=<nowiki>|</nowiki>''другой параметр''=<nowiki>|}}</nowiki></code>
|''базовое имя''[=''значение'']|…}}
: <code><nowiki>{{#invoke:Transclude|npc|</nowiki>''внутренний шаблон''<nowiki>|</nowiki>''общий параметр''=''значение''<nowiki>|</nowiki>''другой общий параметр''=''значение''<nowiki>|…|</nowiki>''параметр''=<nowiki>|</nowiki>''другой параметр''=<nowiki>|…}}</nowiki></code>
 
Вызывает внутренний шаблон несколько раз, передавая в него блоки аргументов объемлющего шаблона (того, в коде которого указан #invoke). Параметр ''название12'' передаётся как ''название'' в 12-й вызов шаблона. Для этого нужно указать в вызове модуля {{para|''название''|}}.
 
Например, объемлющий шаблон с кодом
: <code><nowiki>{{#invoke:Transclude|npc|внутренний шаблон|вверху=|внизу=}}</nowiki></code>,
вызванный таким образом:
<pre><nowiki>{{объемлющий шаблон
|вверху1 = 11
|внизу1  = 12


<small>Абзац сильно переписан, т.к. авторский текст был тотально невразумителен. --Incnis Mrsi</small>
|вверху2 = 21
: [[Итератор]] по массиву из групп параметров типа «параметр{{mvar|k}}=…» (где номер {{mvar|k}} группы — десятичное число) вызываемого шаблона. Группы подставляются в список из одного или более указанных шаблонов, заданных в виде нумерованных параметров. Одна группа в один из шаблонов, которые применяются по круговой очереди с возрастанием {{mvar|k}}. Вывод шаблонов [[конкатенация|соединяется]] в том же порядке. Пример использования с двумя шаблонами: полосатые строки в таблицах.
|внизу2  = 22


Именованные параметры представляют базовые имена вызывающего шаблона (автор хотел сказать, его параметров? --Incnis Mrsi), которые будут также именами параметров для вызываемых шаблонов. Их значения (необязательные) будут использоваться по умолчанию, если для какого-то {{mvar|k}} есть некоторые, но не все значения. <small>По-видимому автор намекает на то, что когда для какого-то {{mvar|k}} нет значений никаких, на нём процесс и останавливается. --Incnis Mrsi</small>
|вверху3 = 31
|внизу3  = 32
}}</nowiki></pre>
возращает
<pre><nowiki>{{внутренний шаблон
|вверху = 11
|внизу  = 12
}}{{внутренний шаблон
|вверху = 21
|внизу  = 22
}}{{внутренний шаблон
|вверху = 31
|внизу  = 32
}}</nowiki></pre>


Параметры сортируются <u>при выводе</u> по числам (начиная с ничего, потом ноль).{{непонятно}}<small> видимо, отсылка к оператору table.sort(ns); но смысл ускользает. --Incnis Mrsi</small>
Можно также указать в вызове модуля общие аргументы, который будут передаваться в каждый вызов внутреннего шаблона. Например, объемлющий шаблон с кодом
: <code><nowiki>{{#invoke:Transclude|npc|внутренний шаблон|общий={{{общий|}}}|вверху=|внизу=}}</nowiki></code>,
вызванный таким образом:
<pre><nowiki>{{объемлющий шаблон
|общий  = 0


=== call ===
|вверху1 = 11
  &#123;{#invoke:Transclude|call|''имя шаблона''}}
|внизу1 = 12


Просто вызывает указанный шаблон с аргументами вызывающего.
|вверху2 = 21
|внизу2  = 22


=== join ===
|вверху3 = 31
&#123;{#invoke:Transclude|join|''разделитель''|''терминальный разделитель''
|внизу3  = 32
  |''игнор''|[from=''номер''|][to=''номер''|]''список параметров''…}}
}}</nowiki></pre>
возращает
<pre><nowiki>{{внутренний шаблон
|общий = 0


Версия [[#forall]] без шаблона, объединяет нумерованные аргументы от <code>from</code> или 1 до <code>to</code> или первого отсутствующего через указанный ''разделитель''.
|вверху = 11
|внизу  = 12
}}{{внутренний шаблон
|общий  = 0


Последний элемент можно присоединять иначе, задав ''терминальный разделитель'' (необязательный; по умолчанию «,» или «и»).
|вверху = 21
|внизу  = 22
}}{{внутренний шаблон
|общий  = 0


Если значение параметра ''игнор'' равно «s», то строки из пробелов игнорируются; если оно равно «_», то игнорируются пустые строки.
|вверху = 31
|внизу  = 32
}}</nowiki></pre>


<!-- === split ===
Обратите внимание, что необходимо ставить вертикальную черту сразу после значения общего параметра, потому что вызовы модулей, в отличие от вызовов шаблонов, не обрезают пробелы:
&#123;{#invoke:Transclude|split|''имя шаблона''|''разделитель''|''строка параметров''}}
: <code><nowiki>{{#invoke:Transclude|npc|внутренний шаблон|общий={{{общий|}}}|вверху=|внизу=}}</nowiki></code>
или
<pre><nowiki>{{#invoke:Transclude|npc|внутренний шаблон|
общий={{{общий|}}}|
вверху=|
внизу=}}</nowiki></pre>
но не
<pre><nowiki>{{#invoke:Transclude|npc|внутренний шаблон
|общий={{{общий|}}}
|вверху=
|внизу=}}</nowiki></pre>


Разрезает строку указанным разделителем и передаёт куски шаблону.
Замечания:
* Общие параметры также учитываются вместе с остальными при выборе того, что передавать во внутренний шаблон: если в объемлющем шаблоне указан параметр ''общий12'', он передастся в 12-й вызов внутреннего шаблона под названием ''общий'' и может заменить общий параметр.
* Происходят вызовы внутреннего шаблона не для всех нумерованных блоков параметров, а только для непустых, так что могут быть пропуски. А именно, вызывается блок 12, если в объемлющем шаблоне есть параметр ''параметр12'' и в вызове модуля есть параметр ''параметр''. Рекомендуется, чтобы внутренний шаблон при вызове без параметров возвращал пустую строку.


Примечание: по состоянию на 15 мая не удалось сделать демонстрацию работы данной функции. Есть предположение, что в коде (см. комментарии) имеется ошибка.
Пример использования: [[Шаблон:Карточка]] вызывает [[Шаблон:Карточка/внизу]].


{{#invoke:Transclude|split|code| |за code сада}}
{{#invoke:Transclude|split|code| |засада}}
{{#invoke:Transclude|split|code|-|за-сада}}
-->
=== cycle ===
=== cycle ===
&#123;{#invoke:Transclude|cycle|''имя шаблона''|{{mvar|n}}|''список параметров''…}}
: <code><nowiki>{{#invoke:Transclude|cycle|</nowiki>''имя шаблоан''|{{mvar|n}}|''список параметров''…<nowiki>}}</nowiki></code>
 
{{заготовка раздела}}


Действует аналогично [[#forall]] по числовой переменной, изменяющейся от 1 до {{mvar|n}}. Другое начало можно задать в виде «-10..10» вместо {{mvar|n}}. Также можно задать предел цикла в виде имени шаблона (если второго параметра нет или он имеет вид «1..», шаблон раскрывается, пока не пуст). Не увлекитесь!
Действует аналогично [[#forall]] по числовой переменной, изменяющейся от 1 до {{mvar|n}}. Другое начало можно задать в виде «-10..10» вместо {{mvar|n}}, или в обратном порядке «10..-10». Также можно задать предел цикла в виде имени шаблона (если второго параметра нет или он имеет вид «1..», шаблон раскрывается, пока не пуст). Не увлекайтесь!


Замечание: номера нумерованных параметров шаблона при записи увеличить на 1.
Замечание: номера нумерованных параметров шаблона при записи увеличить на 1.
<!--Не работает
=== pass ===
&#123;{#invoke:Transclude|pass|''имя шаблона''|''имя параметра''|''значение''…}}


Передаёт шаблону параметры без подрезки.
Параметром <code>output</code> можно задать как выводить шаблоны.
-->
* ''newline'' — каждый шаблон на новой строке.
== Примеры использования ==
* ''inline'' — все шаблоны в одну строку (по-умолчанию).
* [[Шаблон:Карточка]] (для &#123;{#invoke:Transclude|npc}})


== Тесты шаблона ==
См. [[Модуль:Transclude/tests]] и [[Шаблон:Test transclude]].


<noinclude>
== См. также ==
[[Категория:Модули:Документация]]</noinclude>
* [[Модуль:String/split]]
* [[Модуль:CallMW]]
<includeonly>[[Категория:Тептар:Модули]]</includeonly>

Навигация