MediaWiki三级嵌套transclusion中顶层页面显示二级页面名称诉求
MediaWiki三级嵌套转置场景下获取二级页面名称的需求
核心问题
在MediaWiki的三级嵌套页面转置结构中,需要让顶层页面显示二级页面的名称。
示例场景
创建了3个页面:3、2、Template:1,嵌套逻辑如下:
- 页面
3通过代码{{:2}}嵌入页面2 - 页面
2通过代码{{1}}嵌入Template:1 Template:1内包含调用当前页面名称的代码{{PAGENAME}}
期望结果:页面3显示2
实际结果:页面3显示3
已尝试操作
已测试多种实现方式,相关尝试记录在内部模板页面中。
最终业务目标
为每个diehot盒子添加对应编辑链接:在聚合多个diehot的页面中,每个diehot盒子的编辑链接需直接指向该diehot的专属编辑页面。diehot页面基于Dieshot-box模板构建,模板中包含编辑链接的代码逻辑。
使用环境
- MediaWiki 1.35.3
- Extension:ParserFunctions 1.6.0
- Extension:Variables 2.5.1
解决方法
方案1:模板参数显式传递
通过在嵌套层级中主动传递页面名称参数,保留二级页面的上下文:
- 修改页面
2的模板嵌入代码为:{{1|sourcepage={{PAGENAME}}}} - 将
Template:1中的{{PAGENAME}}替换为{{{sourcepage}}}
这样页面3加载时,页面2会把自身名称传给Template:1,最终顶层页面就能正确显示二级页面名称。
方案2:利用Variables扩展传递上下文
借助Variables扩展在二级页面存储名称,再在模板中读取:
- 在页面
2中,嵌入Template:1之前添加代码:{{#vardefine:secondarypage|{{PAGENAME}}}} - 将
Template:1中的{{PAGENAME}}替换为{{#var:secondarypage}}
该方案通过全局变量传递上下文,无需修改模板参数结构,适合复杂嵌套场景。
针对diehot编辑链接的适配
结合上述方案,调整Dieshot-box模板的逻辑:
- 在每个diehot页面中,嵌入模板时传递自身名称:
{{Dieshot-box|targetpage={{PAGENAME}}}} - 在
Dieshot-box模板中,将编辑链接部分修改为:[[{{{targetpage}}}|编辑]](若需直接生成编辑URL,可使用{{fullurl:{{{targetpage}}}|action=edit}})
这样每个diehot盒子的编辑链接就能精准指向对应的编辑页面。
内容的提问来源于stack exchange,提问作者ZyMOS
相关产品推荐
相关产品推荐

