#mediawiki #mediawiki-templates
#mediawiki #mediawiki-шаблоны
Вопрос:
Как часть шаблона, я хотел бы установить категорию страницы. Но также и для того, чтобы эта категория не включалась при преобразовании этой страницы.
Итак, если у меня есть определение шаблона для шаблона:Person
<includeonly>Name: {{{1|}}}
[[Category:People]]
</includeonly>
Затем на странице персоны «Джон Смит», которая добавляет Джона Смита в категорию людей, как требуется
{{Person|John Smith}}
Но тогда у меня есть страница, которая перекрывает страницу Джона Смита, но я не хочу, чтобы она была в категории Люди. Скажем, страница «Сотрудник недели» имеет
== Best employee ever ==
{{:John Smith}}
Теперь у меня такое чувство, что это можно сделать с {{subst:}}
помощью или {{safesubst:}}
как описано здесь: https://www.mediawiki.org/wiki/Help:Substitution но я не могу этого понять
Теперь я вижу, что в Википедии есть шаблон, который выглядит так, как будто он делает то, что я хочу, https://en.wikipedia.org/wiki/Template:Noinclude но я не могу этого понять, и у меня это не работает. Одной из вещей, которые я пробовал, было добавление шаблонов noinclude
и dtag
в мою вики, а затем попытка сделать это для Template:Person, но это не сработало
<includeonly>Name: {{{1|}}}
{{subst:noinclude|[[Category:People]]}}
</includeonly>
Комментарии:
1. Я не думаю, что то, что вы пытаетесь сделать, возможно без
{{subst:Person|John Smith}}
, что затем расширяет шаблон на странице пользователя, где шаблон может добавлять<noinclude>
теги вокруг категории.
Ответ №1:
Попробуйте это:
<includeonly>Name: {{{1|{{PAGENAME}}}}}
{{#ifeq:{{PAGENAME}}|{{{1|{{PAGENAME}}}}}|[[Category:People]]}}</includeonly>
Функция синтаксического {{#ifeq:}}
анализа предоставляется расширением ParserFunctions, поставляемым с MediaWiki. Он сравнивает первые два аргумента и возвращает третий, если они равны, четвертый в противном случае.
Предполагается, что имя страницы будет таким же, как параметр шаблона; или определяется параметрами, если реальный шаблон более сложный, чем пример.
Комментарии:
1. Хорошая идея, я бы не стал использовать значение по умолчанию. Это означает, что написание
{{Person}}
«John Doe» будет работать, но если вы затем включите{{:John Doe}}
его в другом месте, он отобразит » Имя: сотрудник недели » (и включит его в категорию).2. Мне нравится эта идея, я попробую ее завтра
3. @Берги, достаточно справедливо. Использование значений по умолчанию — моя привычка, в то время как преобразование страниц без шаблонов — нет.
Ответ №2:
Я пошел на более сложное решение, которое работает для меня. Сначала я установил расширение переменных, https://www.mediawiki.org/wiki/Extension:Variables
Затем создал шаблон Template:SetCategories
<includeonly>{{#varexists:hidecats||{{#arraymap:{{{names|}}}|,|x|[[Category:x]]|}}}}</includeonly>
Затем у меня (уже был) шаблон трансклюзии, Template:IncludePageWithHeader
поэтому я добавил переменную при трансклюзии страницы {{#vardefine:hidecats|yes}}
<includeonly>{{#switch: {{{heading_level|}}}
| 2 = == [[{{{name|}}}{{#if: {{{extra|}}}|,amp;#32;{{{extra|}}}|}}|{{{name|}}}]] ==
| 3 = === [[{{{name|}}}{{#if: {{{extra|}}}|,amp;#32;{{{extra|}}}|}}|{{{name|}}}]] ===
| 4 = ==== [[{{{name|}}}{{#if: {{{extra|}}}|,amp;#32;{{{extra|}}}|}}|{{{name|}}}]] ====
| === [[{{{name|}}}{{#if: {{{extra|}}}|,amp;#32;{{{extra|}}}|}}|{{{name|}}}]] ==
}}
{{#vardefine:hidecats|yes}}
{{:{{{name|}}}{{#if: {{{extra|}}}|,amp;#32;{{{extra|}}}|}}}}</includeonly>
Итак, теперь Template:Person
становится
<includeonly>Name: {{{1|}}}
{{SetCategories|names=People}}
</includeonly>
И тогда сотрудником недели становится
{{IncludePageWithHeader|name=John Smith}}