Template:When on basepage
{{When on basepage}}是一个元模板,它帮助其他模板检测它们是否位于基页面(即页面名称匹配模式“X:X”的页面)、子页面(“X:X/X”)或子子页面(“X:X/X/X”)上。
检测页面是否为子页面的另一种方法是结合解析器函数#ifeq:和#titleparts,参阅下面的用于简单文本的替代方案。
用法
{{When on basepage|基页面结果|子页面结果|子子页面结果|page=页面名称}}
例如,在页面“User:Example”上使用{{When on basepage|Basepage|Subpage}}将返回:Basepage
而在“User:Example/page”(或“User:Example/page/page”、“User:Example/page/page/page”等)上,它将返回:Subpage
在诸如“User:Example/page/page”(或“User:Example/page/page/page”等)的子子页面上,{{When on basepage|Basepage|Subpage|Subsubpage}}将返回:Subsubpage
使用空参数来指定对特定类型页面不采取任何操作。例如,{{When on basepage|Basepage|Subsubpage}}在“User:Example/page”上将不返回任何内容,但在“User:Example/page/page”、“User:Example/page/page/page”等页面上将返回“Subsubpage”(如果在“User:Example”上则返回“Basepage”)。
处理等号(=)
如果参数值包含等号(=),请使用编号参数,即:
- {{When on basepage|1=基页面结果|2=子页面结果|3=子子页面结果}}
page参数
page参数用于测试/演示。例如:
- {{When on basepage |基页面结果|子页面结果|page=User:Example/test}}
无论上述代码放置在何处,它都将返回:(子页面结果)
(因为“User:Example/test”是一个子页面)。该页面不必存在。
如果page留空(|page=)或未定义,则使用模板被嵌入的页面(即{{PAGENAME}})。
page也接受变量,例如{{When on basepage|基页面结果|子页面结果|page={{{page|}}} }}
技术说明
此模板检测所有名字空间中的子页面,包括那些未启用MediaWiki子页面功能的名字空间。
用于简单文本的替代方案
可以不使用其他模板来检测子页面,而是使用标题分割解析器函数#titleparts配合#ifeq:
{{#ifeq:{{#titleparts:{{PAGENAME}}|1|1}}|{{PAGENAME}}
| [...基页面上的代码...]
| [...子页面上的代码...]
}}
例如,可以通过使用#ifeq和#titleparts的类似标记来检查页面是否为/sandbox版本:
- {{#ifeq: {{#titleparts:{{PAGENAME}}|1|1}} | {{PAGENAME}}
- | {{documentation}}
- | {{template sandbox notice}}
- }}
这种简单的逻辑之所以有效,是因为Template:Template sandbox notice在显示沙盒通知之前也会检查页面名称是否包含“/sandbox”;否则,任何其他子页面都不会显示额外文本。通过避免使用模板,并使用单个#ifeq,处理过程仅使用+2个扩展深度级别,而不是+7个级别,并且避免了在复杂的/doc页面内出现“超出模板限制”的情况。
另请参阅
{{Ns has subpages}}