Jump to content
MediaWiki

嵌入

From mediawiki.org
This page is a translated version of the page Transclusion and the translation is 77% complete.
建议将本页或本节与Help:Transclusion 合并。(讨论)

嵌入通常指把一个文档的内容引用到另一个文档里。 在wiki的上下文中,使用MediaWiki的可以在多个文档中包含相同的内容,而无需单独编辑这些文档。

如何嵌入

使用下面的代码把任何页面嵌入其它目标页面(在单一MediaWiki项目内,例如维基百科):{{SOMEPAGE}}

每当目标页面A被渲染时,源页面B(在本例中为SOMEPAGE)的全部内容将在嵌入标签所在的位置进行渲染。

例如,您可能决定在每个新用户的讨论页上放置一条欢迎信息。嵌入功能在模板页面与应显示该信息的目标页面之间创建了一种"实时"链接。当模板被编辑时,所有目标页面也会随之更新。

您也可以创建一个包含您邮寄地址的(模板)页面,并将该模板不仅放在自己的页面上,还添加到所有朋友的页面中。当您将电视和沙发搬到另一间公寓时,只需修改您的地址模板,这些新信息就会自动更新到所有朋友的页面上。

嵌入标记和语法

如果源页面位于模板命名空间(例如"Template:Welcome"),则只需单独使用该名称本身即可: {{Welcome}}

如果源页面位于主命名空间(例如"VisualEditor"),则必须在名称前添加冒号(VisualEditor): {{:VisualEditor}}

如果源页面位于任何其他命名空间(例如"User:Example"),则必须使用完整名称,包括命名空间: {{User:Example}}

如果源页面是目标页面的子页面(例如"Transclusion/ja"),则无论命名空间如何,您都可以直接指定子页面的名称: {{/ja}}

词源

泰德·尼尔森在其1982年的著作《文学机器》中创造了"嵌入 "一词,以及"超文本"和"超媒体"这两个术语。

部分嵌入

通过使用"noinclude"、"onlyinclude"和"includeonly"标记,可以仅嵌入页面的一部分而非全部内容。这种部分嵌入也可以通过从其他页面(如子页面)进行嵌入来实现。通常我们希望不嵌入某些信息,例如模板文档和分类。

关于何时使用完整嵌入与部分嵌入的示例

使用完整嵌入时,您希望在目标页面中包含源页面的全部内容。 例如,您可以将一个关于苹果的页面的全部内容嵌入到一个关于树木果实的页面中。 使用部分嵌入时,您仅希望在目标页面中包含源页面的一部分内容。 例如,您可以仅将一个关于苹果的页面中有关青苹果的信息嵌入到一个关于烘焙常用食材的页面中。

部分嵌入标记

  • noinclude – 标记 ‎<noinclude>...‎</noinclude> 表示标签之间的文本"仅在源页面可见,无法嵌入到其他页面"。 这对于模板文档和分类很有用。
  • includeonly – 标记 ‎<includeonly>...‎</includeonly> 表示标签之间的文本"在源页面上会被隐藏,仅在嵌入到其他页面时才可见"。 这可能会很有用,例如,用于向嵌入模板的页面添加分类,而不会将该模板本身加入这些分类中。
  • onlyinclude – 标记 ‎<onlyinclude>...‎</onlyinclude> 表示标签之间的文本"在源页面上可见,并且在嵌入到其他页面时也可见"。 这是部分嵌入标签中最微妙的一种,因为它通常会覆盖其他标签的作用。 如果页面上至少有一对"onlyinclude"标签,那么每当该页面被嵌入时,会嵌入"onlyinclude"标签内的内容。 一个页面上可以有多个"onlyinclude"这样的区段。 这可能会很有用,例如,为了在第二个页面上重复第一个页面的一小部分内容:只需将该小部分用 onlyinclude 标签包围,并将其嵌入到第二个页面即可。
‎<noinclude>‎<includeonly>‎<onlyinclude>‎<nowiki> 标签内的行为不同。 nowiki 标签启用对特殊标记的转义,并且会对 ‎<noinclude>‎<includeonly> 标签执行此操作。 然而,‎<nowiki> 标签内的 ‎<onlyinclude> 标签仅产生 ‎<onlyinclude> 标签内的内容。
Examples of transclusion tags
标记语法 嵌入时的输出
<nowiki><noinclude> My content </noinclude></nowiki> <noinclude> My content </noinclude>
<nowiki><includeonly> My content </includeonly></nowiki> <includeonly> My content </includeonly>
<nowiki><onlyinclude>My content</onlyinclude></nowiki> My content

您可以将所有三种嵌入类型相互嵌套,从而能够精确控制在当前页面上显示的内容以及在嵌入页面上可见的内容。

子页面

您可以将要嵌入的文本剪切并粘贴到一个中,然后在嵌入模板中使用该子页面的名称。这种方法仅在启用了子页面的地方可用;例如,在英文维基百科上,子页面只能用于用户、讨论或维基百科页面;目前,子页面。

示例:您想讨论将 Pussycat 删除并重定向至 Cat。首先,创建子页面 Talk:Pussycat/Let's delete Pussycat!,在其中写下您的评论,然后使用模板 {{Talk:Pussycat/Let's delete Pussycat!}} 将其嵌入到 Talk:PussycatTalk:Cat 中。在任一讨论页发布的评论都会同时显示在两者上。

特殊页面

参见: 和 Manual:$wgAllowSpecialInclusion

Special:Specialpages 上的一些页面可以被嵌入,例如:

示例:{{Special:Newpages/3}} 会生成 3 个新页面。

可以给URL 参数像模板参数一样的值,例如: {{Special:RecentChanges|namespace=10|limit=5}}

通过模板嵌入的替代方法

有时您可能想使用一个模板,但出于某种原因不想使用嵌入。将模板的代码/文本一次性自动复制到模板标签的位置被称为模板替换或子包含。要对模板的代码/文本进行子包含,只需在标准嵌入标签中添加 subst:,将模板标签修改为替换标签,形成形如:{{subst:模板名称}} 的标签。

Labeled Section Transclusion

An extension called Labeled Section Transclusion enables marked sections of text to be transcluded.

Scribunto

You can transclude page content, or even parts of it, using Lua with the Scribunto extension. See Module:Transcluder for an example on this wiki.

Semantic MediaWiki

The Semantic MediaWiki extension uses inline queries to query and display semantic data. There are currently two ways to perform transclusion or something similar:

  1. Transclusion proper. The display format "embedded" ensures that selected pages (mainspace articles, templates, etc.) are transcluded. As with templates, sections placed between noinclude tags will be omitted.
  2. Selected passages in a page can be assigned a property of type 'Text'. These selections can be requested by running an inline query for this type of property.

See inline queries for further information.

参阅

模板

Usage on Wikimedia sites

  • T6547Cross-Wikimedia inclusion (interwiki templates transclusion, etc.) unsupported

AltStyle によって変換されたページ (->オリジナル) /