如何在模板中嵌入 <noinclude> 标签以仅在原始页面上设置类别

问题描述

作为模板的一部分,我想设置页面的类别。但也要在嵌入该页面时不包含该类别。

所以如果我有 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 但我无法弄清楚,它对我不起作用。我尝试过的其中一件事是将 noincludedtag 模板添加到我的 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|}}}|,&#32;{{{extra|}}}|}}|{{{name|}}}]] ==
| 3 = === [[{{{name|}}}{{#if: {{{extra|}}}|,&#32;{{{extra|}}}|}}|{{{name|}}}]] ===
| 4 = ==== [[{{{name|}}}{{#if: {{{extra|}}}|,&#32;{{{extra|}}}|}}|{{{name|}}}]] ====
| === [[{{{name|}}}{{#if: {{{extra|}}}|,&#32;{{{extra|}}}|}}|{{{name|}}}]] ==
}}
{{#vardefine:hidecats|yes}}
{{:{{{name|}}}{{#if: {{{extra|}}}|,&#32;{{{extra|}}}|}}}}</includeonly>

所以现在 Template:Person 变成了

<includeonly>Name: {{{1|}}}
{{SetCategories|names=People}}
</includeonly>

然后本周的员工变成了

{{IncludePageWithHeader|name=John Smith}}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...