引用另一篇文章中的数据

时间:2015-02-08 01:07:46

标签: mediawiki mediawiki-templates

(对于downvote:我在Stack Overflow上询问的原因是因为这是一个涉及"编程"使用MediaWiki的模板系统的问题)

我正在寻找一种在MediaWiki文章页面上包含数据的方法,这样也可以从其他页面引用数据值,而无需复制其他页面上的数据。最好不要安装额外的扩展。

我所追求的是能够创建如下所示的文章页面:

<!-- This page is 'Example' in the main namespace -->
{{Infobox
 | CreationDate = 2015-01-01
 | CreatedBy = John Smith
}}
This article is about the item created by {{d|CreatedBy}}.

在浏览器中查看此页面时,它应如下所示:

+------------------------+
|        Example         |
| Created on: 2015-01-01 |
| Created by: John Smith |
+------------------------+
This article is about the item created by John Smith.

然后在另一页上,我可以参考上面的示例&#39;示例&#39;页面,像这样:

* Example created by {{d|Example|CreatedBy}} on {{d|Example|CreationDate}}

这将是这样的:

* Example created by John Smith on 2015-01-01

这种情况的典型用途是将数据放在文章页面上,然后能够提供比使用类别更丰富的列表。目前列表中的所有数据都是重复的,因此如果它被更改,则需要在两个地方进行更新 - 包括文章内和#34;丰富列表中的#34;。

1 个答案:

答案 0 :(得分:0)

我想我已经研究过如何做到这一点。首先,正确的解决方案似乎是使用Semantic MediaWiki,这是一个专为使用MediaWiki进行数据存储而设计的扩展。但是在普通的MediaWiki中,这可以通过以下方式实现。

Page Template:D

{{#if:{{{2|}}}|{{:{{{d|Page|Field}}}|{{{2}}}}}
| {{:{{FULLPAGENAME}}|{{{d|Field}}}}}
}}

这允许{{#if:{{{1|}}}|{{#ifeq:{Template:D}|_valid|1|{{{{Template:D}|}}}}}| <!-- Existing infobox goes here --> }} _valid像原始问题一样工作。

还需要更改信息框代码,以便它被包围:

1

这使得信息框数据已启用。这意味着您可以将其中包含其中一个信息框的页面作为模板处理,并将其包含在另一个页面中。这就是{{d|Pagename|_valid}}所做的事情 - 它将整篇文章作为模板包含在内,而信息框中的这段代码可确保代替整个页面内容包含在1点,而不是利息包括在内。

它还添加了一个名为{{#ifeq:...}}的特殊字段,其值为Template:D,可用于检测包含有效信息框的页面。如果您在使用该页面上的任何字段之前确保<onlyinclude>{{My Infobox|{{{1|}}} | Field1 = Value1 | Field2 = Value2 | etc. }}</onlyinclude> 等于|{{{1|}}}(例如使用Template:D),那么您将获得正确的数据。这很重要,因为如果您使用的页面没有启用数据的信息框,那么每个{{#foreach:}}次出现都会嵌入页面的全部内容!

最后,每个信息框都必须更改为这样输入:

{{#i:}}

这是必需的,因为MediaWiki can't embed <onlyinclude> tags within templates。信息框名称末尾的{{d|{{#i:}}|Example}}用于将字段参数从Example传递到文章页面并传递到信息框模板本身。

以下是一个有效的例子: