此页面是“帮助:模板”页面的翻译版本,翻译已完成 89%。
过时的翻译是这样标记的。
语言:
注意:当您编辑此页面时,您同意根据 CC0 合同许可您的贡献。 您可以在公共领域帮助页面上找到更多信息。
翻译
如果您需要在多个页面上倒入标准文本,请考虑使用 MediaWiki 的模板功能。 与扩展和媒体文件不同,模板没有中央存储库。 编辑者可以编写新模板,将已经完成的重复工作存储为模板,或者从另一个 wiki(例如维基百科)导出模板并将其导入目标 wiki。
创造
模板是标准的 wiki 页面,其内容旨在嵌入到其他页面中。 模板名称遵循后缀“template:”的约定,将它们委托给相应的命名空间; 并且,您可以像任何其他 wiki 页面一样创建模板页面。
最简单的模板用法如下。 假设您创建一个名为“模板:欢迎”的页面,其中包含以下内容:
您好!欢迎来到本 wiki。
这样,您就创建了第一个模板! 如果您随后在任何其他页面上插入此代码:
{{歡迎}}
在任何其他页面上,都会显示文本“您好!欢迎来到 wiki。” 查看页面时将出现而不是 {{Welcome}}。 模板内容被“嵌入”到另一个页面中,即集成在页面中。
然后,您可以在任何您希望欢迎某人的页面上的任意位置插入 {{Welcome}}。 假设它被用在 100 个页面中。 如果您随后将模板内容修改为:
你好呀!欢迎来到这个奇妙的 Wiki。
并重新访问使用该模板的 100 个页面中的任何一个,您将看到新文本而不是原始文本。 这样,您就已经修改了 100 个页面的内容,而无需对其进行编辑,因为模板已嵌入到这些页面中。
这只是模板最基本的用途之一。 此外,模板还具有更加灵活易用的功能。
用法
模板可以通过以下三种方式使用:
事实上,常规 wiki 页面也可以通过指定它们所在的命名空间来用作模板,因此:
如果指定的命名空间不存在,则假定完整标头是模板:
范围
为了丰富嵌入包含机制,MediaWiki 允许在嵌入模板时向模板传递参数。 由于参数的作用,模板可以提供不同的内容并具有不同的行为。
假设您想在其他用户的讨论页面上插入感谢信,例如:
感谢你! 感谢张三的辛苦付出
感谢信包括感谢您的奖励(示例中的“您的努力”)和署名(“约翰尼”)。 您的目标是任何用户都可以出于任何原因感谢其他用户。
为了让任何人以任何理由感谢任何人,您需要定义一个感谢信模板,命名为模板:Thankyou。 使用感谢信模板将使所有感谢信看起来都很相似,但指定可以自定义的内容的某些部分(例如为什么感谢和署名)。 所以需要将此内容设置为参数。 感谢信模板的核心内容如下所示。 如果我们忽略其余元素来对框进行底框并放置图像,则模板的核心将如下所示:
'''感谢你!''' 感谢 {{{1}}}。 来自 {{{2}}}
请注意{{{1}}}和{{{2}}},这些是参数,它们可以与模板一起引入到其他页面中。 注意:在模板中,每个变量都由三组花括号括起来:{{{ }}}。 这与模板名称周围的大括号不同。
使用模板时需要是参数参数,不同参数之间用管道符(|)分隔。 MediaWiki 允许三种形式的可变参数:匿名、编号和命名。
匿名参数
要匿名传递参数,需要按顺序列出这些参数:
{{Thankyou|你的努力|张三}}
在这个反例中,{{Thankyou}}模板接收参数{{{1}}}=你的努力和{{{2}}}=张三,所以输出是:
感谢你! 感谢张三的辛苦付出
匿名传递参数时,赋值的顺序很重要。 如果参数顺序颠倒:
{{Thankyou|张三|你的努力}}
输出是:
感谢你! 谢谢张三的努力
按顺序识别参数(使用 {{{1}}} 等)仅适用于匿名参数。 使用序数的模板将无法访问任何标有名称的参数,如下图所示。
如果等号 (=) 出现在匿名模板参数的变量内部,它将被误解为 a(如下所述),将等号之前的文本误认为是参数名称,并将等号旁边的文本视为参数的值。 当您需要在属性中包含外部链接或 HTML 元素时,就会出现此常见问题(请参阅任务 T16235)。 避免此问题的方法是改用命名参数或编号参数,请参见下文。
数字参数
当按数字传递参数时,需要给出变量的编号:
{{Thankyou|2=张三|1=你的友好}}
示例中,虽然变量声明的顺序没有形参,但模板{{Thankyou}}接收到{{{1}}}=您的友善度和{{{2}}}=张三,所以它会输出:
感谢你! 谢谢张三的好意
如果任何编号参数都用“=”字符丰富,这也可能会变得有用。
例子:
{{Thankyou|1=添加“=”|2=我}}
将生成:
感谢你! 感谢您添加“=”。来自我
警告:
这还需要对其他参数进行编码。
命名参数
与编号参数类似,形式参数的第三种形式只是用名称替换数字。 为了演示,需要将模板内容更改为:
'''感谢你!''' 感谢{{{reason}}}。 来自{{{signatrue}}}
在示例中,使用 {{{reason}}} 和 {{{signature}}} 来声明参数而不是数字。 形式参数如下:
{{Thankyou|signature=张三|reason=你的一切}}
在示例中,{{Thankyou}} 模板接收到 {{{reason}}}=your everything 和 {{{signature}}}=Zhang San 并输出:
感谢你! 感谢张三所做的一切
命名参数区分大小写,因此:
{{Thankyou|signature=我|Reason=为你是谁|reason=为大小写敏感}}
会成为:
感谢你! 感谢您区分大小写。来自我
在模板中使用命名参数的优点是,除了参数顺序灵活之外,当参数较多时,还可以使模板代码更容易理解。
默认值
当你嵌入一个应该有参数的模板,但没有提供它需要的参数时,即:
{{Thankyou}}
在前面的编号参数的情况下,您将得到:
感谢你! 谢谢{{{1}}}。 来自{{{2}}}
当不包含参数时,它只是输出变量本身。 此时设置变量的默认值就方便多了。 例如,如果您将模板内容修改为:
'''感谢你!''' 感谢{{{reason|一切}}}。 来自{{{signature|张三}}}
{{{reason|everything}}}表示如果{{{reason}}}变量的参数没有参数化,则输出默认值。 同样,{{{signature|张三}}}中的{{{signature}}}变量默认输出张三。 修改后的模板输出以下结果:
感谢你! 感谢我所做的一切
参数的值可以是空字符串。 例如,在{{foo|bar=}}或{{foo|bar=|baz=qux}}中,foo模板认为bar参数是“”。 这与完全省略参数不同,后者使参数未定义并触发上述默认值机制。
默认值通常用于为参数指定其他名称。 例如,如果您有 {{{a|{{{b|}}} }}},则模板首先查找名为 a 的参数。 如果此参数不存在,则使用名为 b 的参数。 如果 a 和 b 都不存在,则两者都不输出。
操作流程
这是一个中级主题,仅应根据需要阅读。
通常,模板参数在标记化后会替换为模板,但保持不变。 这些参数在使用之前都会被评估。
这会产生一些后果。 首先,如果你有Template:Start包含{{mytemplate,Template:End包含Template:End,将{{start}}{{end}}放在页面上,那么mytemplate将不会被嵌入,因为类似“|” ” 保留字符不会添加到模板中,但特殊含义保留在模板中。 您仍然可以使用模板控制参数或模板名称网站模板不显示,但无法在多个模板之间分离模板调用。
第二个结果是消除死代码。 如果您进行类似 {{foo|{{DISPLAYTITLE:Bar}} }} 的模板调用,Template:Foo 不包含 {{{1}}},则不会使用 displaytitle,因为只有在必要时才会进行评估,并且这里的参数没有被替换,所以没有被估计。 这通常发生在增强:解析器函数时,并且在与 int: 魔术词(随用户的语言而变化)一起使用时尤其明显。
以神奇单词 subst: 或 safesubst: 开头的模板调用在单独的第一遍(仅在保存时发生)上进行评估,以及 ~~~~ 和链接,使用管道方法。 如果无法在第一次传递时对其进行评估,则 safesubst: 将被视为普通模板。
许多(但不是全部)解析器功能嵌入在特殊页面中,解析器标签不像模板那样包含在内,而是用“条带标记”替换。 这意味着您不能使用像 padleft: 这样的解析器函数或扩展中的类似函数来处理此类结果,因为此类函数会将此类结果视为条带标记而不是解析器函数的结果。
在模板中递归
将模板包含在其自身中不会导致 MediaWiki 无限递归。 MediaWiki 将停止递归调用并使模板名称变为粗体。 例如,如果Template:Aaaa的内容是{{Aaaa}} z,则会显示为“aa Template Loop detector: Template:Aaaa zz”。
禁止使用
此保护措施排除了潜在有用的模板习惯用法,其中模板自我规范化其自己的调用参数。 在此禁止示例中, template:d 可以称为 {{d|20200311}} 或 {{d|y=2020|m=3| d=11}}。 如果以第一种方式调用,它会使用第二个参数结构(使用字符串解析器函数获得)递归到自身,然后遵循统一的处理路径。
{{#if:{{{1|}}}|{{d|y={{#sub:{{{1}}}|0|4}}|m={{#sub:{{{1 }}}|4|2}}|d={{#sub:{{{1}}}|6|2}}}|}}
如果 template:d 被修改为递归到 template:d/2 并且 template:d/2 是 template:d 的相同手动副本,则此习惯用法可以正常工作,因为自递归保护措施是动态运行的,而不是静态运行的。
MediaWiki 软件放宽自递归规则的一种可行方法是要求每个递归调用具有与所有先前活动调用不同的参数计数,最多递归一次且参数计数不减少。 这将为防止无限自递归提供强有力的保证,同时以灵活的方式启用有用的习惯用法,例如这里描述的习惯用法。
如果处理路径的复杂性较低,则一种仅使用一个模板的简单解决方案是在单独的 if/else 分支上处理每个调用约定,从而在每种情况下复制处理路径的逻辑。 如果处理路径更复杂,每个调用结构案例可以委托给具有统一调用结构的实现模板,该调用结构提供最终的模板行为。
参数表
由于管道字符 (|) 和等号 (=) 在模板调用和 wikitable 中具有不同的含义,为了在模板参数值中使用表标记,通常需要“转义”该字符(例如,保护它们)从被理解为模板标签),您也可以使用特殊的序列:
在引入这些魔法词之前,许多 wiki 使用模板来完成相同的事情。 在这样的 wiki 上,魔术词优先于同名模板。
示例表
ABC
A1
B1
C1
A2
B2
C1
表代码:
{| class=wikitable !A!!B!!C |- |A1||B1||C1 |- |A2||B2||C1 |}
转义表代码:
{{{!}} class{{=}}wikitable !A!!B!!C {{!}}- {{!}}A1{{!}}{{!}}B1{{!}}{{!}}C1 {{!}}- {{!}}A2{{!}}{{!}}B2{{!}}{{!}}C2 {{!}}}
请注意,第一个左大括号 ({) 被解释为文字左大括号字符,因为它后面紧跟着 {{!}} 魔术词。同样,最后一个右大括号 (}) 被解释为文字右大括号-大括号字符,因为它前面紧跟着相同的魔术词。 然而,在某些情况下,这些大括号字符确实会引起问题,因此一些 wiki 还提供了转义这些字符的模板:
有些 wiki 甚至更进一步,提供了其他方便的模板,例如 {{(!}} 和 {{!!}}。在这样的 wiki 上网站模板不显示,代码可以稍微简化为以下形式:
{{(!}} class{{=}}wikitable !A!!B!!C {{!}}- {{!}}A1{{!!}}B1{{!!}}C1 {{!}}- {{!}}A2{{!!}}B2{{!!}}C2 {{!)}}
控制模板嵌入
默认情况下,模板内容显示在实例中,无论是直接查看还是包含在其他页面中。 当然,您可以使用 , 和 来控制将嵌入模板的哪些部分。
和 之间的任何标记只有在直接查看模板页面时才会显示,并且不会包含在页面中。 当您不希望模板中包含的文本或代码传播到包含它的任何页面时,这非常有用,例如:
与此相反。 和 之间的文字只有嵌入到页面中才会被处理或显示,直接查看时不会显示。 例如:
当模板页面被直接查看并被其他页面包含时,所有其他代码都会被处理和显示。 关键是这两个标签之间的内容。
嵌入时,标记之外的所有代码都将被丢弃。 即使段落被标记为 includeonly,它们在嵌入时也会被丢弃,除非它们也被标记为 onlyinclude。 关键在于标记之外的内容。
也可以嵌套此类标签。
三部分嵌入标记支持处理和表达的所有可能组合。 评论也有效。
组织模板
为了使模板发挥作用,用户需要找到并了解如何使用模板。
如何寻找模板:
单击特殊页面 > 所有页面; 在命名空间:列表中,选择模板,然后单击到达。
为了说明用法,请提供一个示例,如下所示:
== 用法 == 欢迎用户: {{Thankyou|reason=原因|signature=名字}}
然后编辑者可以剪切和粘贴以插入此模板。
编辑页面时,编辑框下方将显示所有使用的模板的列表,显示在标题为“此页面上使用的模板:”(或“此预览中使用的模板:”或“此部分中使用的模板”)的可折叠段落中。 :”,取决于环境)。 此列表提供了模板页面的便捷链接以及有关保护状态的信息。 重定向的模板以粗体显示,其重定向的目标作为单独的列表项添加。
链接到模板
模板页面可以像任何其他 wiki 页面一样链接。 例如,使用 wikicode[[Template:Navbar]] 生成链接 Template:Navbar。
在许多 wiki 上,Template:Tl 可用于提供指向模板的链接,该模板的格式设置为显示转换模板所需的“双花括号”wiki 代码,而无需实际进行转换。 例如,代码 {{tl|Navbar}} 可用于创建链接 {{Navbar}}。
此构造通常用于引用模板时的模板文档、帮助页面和讨论页面。 使用 {{[[Template:Navbar|Navbar]]}} 可以实现相同的效果,但 {{tl}} 方法更简洁。 在任何给定的 wiki 上,Tl 模板(如果存在)可能会也可能不会在“code”元素内呈现为等宽文本,如此处所示。 如果没有(就像在这个维基上一样),另一个类似命名的模板可能会做到这一点。 例如,请参阅英语维基百科文档的“另请参阅”部分。
从一个 wiki 复制到另一个 wiki
模板通常需要 CSS 或其他模板,并且用户在将模板从一个 wiki 复制到另一个 wiki 时经常会遇到问题。 以下步骤对于大多数模板的复制都有效。
媒体维基代码
如果您有新 wiki 的导出权限:
转到源 wiki 上的 Special:Export,下载包含完整历史记录和所需模板的 .xml 文件,如下所示: 转到新 wiki 上的 Special:Import,然后上传 .xml 文件。
如果您没有新 wiki 的导出权限:
进入源wiki上想要复制的模板页面,编辑页面,复制wiki文本; 打开一个新的 wiki,转到与源 wiki 上的模板同名的页面,单击“创建/编辑”,然后粘贴刚刚复制的 wiki 文本。 在编辑摘要链接到源模板页面。 从源 wiki 返回到刚刚复制代码的页面,并在编辑区域下选中“此页面上使用的模板”。 按照上述步骤复制每个模板,穷举与上述所有模板相关的所有模板。
这将复制所有必需的代码并满足一些模板需求。 请注意,呈现页面时仅导入已解析的页面元素,因此在此过程中不会导入文档子页面。 如果这没有帮助,请查看编辑框下方“页面当前版本引用的页面:”下的蓝色链接。 如果是这样,请转到源 wiki 并重复前面的步骤并从模块复制代码。
成功导出另一个 wiki 上的模板及其链接到的模板后,可以对其进行自定义以适应新的 wiki。 例如修改Logo、删除多余的类别和蓝色链接等。
扩大
模板的常见扩展是解析器函数。 访问扩展:解析器函数页面,查看您复制的模板是否包含此处列出的函数。 如果包含,则意味着需要安装解析器功能扩展。 您需要安装新 wiki 的服务器上的管理员权限才能安装它。
另外,模板可以依赖Lua,比如维基百科网站。 在模板代码中使用 {{#invoke: }} 是个好主意。 这时需要安装Scribunto扩展(也需要系统管理员权限)。 您可以参考其页面来了解如何安装和使用该扩展。
CSS 和 JavaScript 代码
在 MediaWiki 代码之外,许多模板使用 CSS,并且某些模板需要 JavaScript 才能发挥完整功能。 如果复制的模板效果不好,这也是可能的原因之一。 要将所需的 CSS 和 JavaScript 复制到您的 wiki,您通常需要管理员权限,因为您需要在“MediaWiki:”命名空间中编辑系统消息。
请参阅模板使用的 CSS 类(类似于 class="foobar" 的文本)。 如果源wiki上的“MediaWiki:Common.css”或“MediaWiki:Monobook.css”出现在这些类中,请将这些类复制到新wiki的“MediaWiki:Common.css”页面,然后检查模板现在是否存在工作。 如果复制的模板仍然无法正常工作,请检查源 wiki 上的“MediaWiki:Common.js”或“MediaWiki:Monobook.js”中是否有代码,如果有,您可以尝试复制到“MediaWiki:Common”。 js”。 一般来说,您应该复制可信代码,首先检测代码,然后选择相关代码。 您可能会发现一些注释可以提供一些线索来检测每个部分的功能。
看
通用模板使用模板中使用的其他特定构造
外部链接
帮助
读
编辑
先进的
个人的
行政人员
检索自“https://www.mediawiki.org/w/index.php?title=Help:Templates/en&oldid=6037660”
发表评论