问题描述
作为模板的一部分,我想设置页面的类别。但也要在嵌入该页面时不包含该类别。
所以如果我有 Template:Person 的模板定义
<includeonly>Name: {{{1|}}}
[[Category:People]]
</includeonly>
然后在“John Smith”的人员页面中,根据需要将约翰史密斯添加到人员类别中
{{Person|John Smith}}
但后来我有一个页面嵌入了 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
模板添加到我的 wiki,然后为 Template:Person 尝试此操作,但它不起作用
<includeonly>Name: {{{1|}}}
{{subst:noinclude|[[Category:People]]}}
</includeonly>
解决方法
试试这个:
<includeonly>Name: {{{1|{{PAGENAME}}}}}
{{#ifeq:{{PAGENAME}}|{{{1|{{PAGENAME}}}}}|[[Category:People]]}}</includeonly>
解析器函数 {{#ifeq:}}
由 MediaWiki 捆绑的扩展 ParserFunctions 提供。它比较前两个参数并返回第三个,如果它们相等,则返回第四个。
假设页面名称与模板的参数相同;或由参数定义,如果实际模板比示例更复杂。
,我选择了一个更复杂的解决方案,它对我有用。我首先安装了变量扩展,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|}}}|, {{{extra|}}}|}}|{{{name|}}}]] ==
| 3 = === [[{{{name|}}}{{#if: {{{extra|}}}|, {{{extra|}}}|}}|{{{name|}}}]] ===
| 4 = ==== [[{{{name|}}}{{#if: {{{extra|}}}|, {{{extra|}}}|}}|{{{name|}}}]] ====
| === [[{{{name|}}}{{#if: {{{extra|}}}|, {{{extra|}}}|}}|{{{name|}}}]] ==
}}
{{#vardefine:hidecats|yes}}
{{:{{{name|}}}{{#if: {{{extra|}}}|, {{{extra|}}}|}}}}</includeonly>
所以现在 Template:Person
变成了
<includeonly>Name: {{{1|}}}
{{SetCategories|names=People}}
</includeonly>
然后本周的员工变成了
{{IncludePageWithHeader|name=John Smith}}