MediaWiki是一款功能强大且灵活的wiki软件,除了系统本身的特性,大量扩展和皮肤的支持,加之自定义脚本、小工具(Gadgets)和微件(Widgets)的可扩展性更是如虎添翼。

其中,自定义脚本可以提供JavaScript和CSS用户增加某些特定功能。小工具提供相同的功能,但用户更容易激活,并且有一些额外的选项。微件不仅允许使用JavaScript和CSS,还可以任意嵌入在不同页面中。因此从应用范围上来说,通常自定义脚本用于全局(比如整个网站中的某个功能、某个皮肤的样式或用户自己的功能设定),而小工具虽然也体现在全局上,但通常会供用户选择是否开启,微件则多用于某些页面或模板中。
除此之外,MediaWiki更重要的一项代码就是模块中所使用的Lua语言,它同样是为全局服务或者更狭义地说就是为模板服务的。

MediaWiki模块

维基百科中不仅有模板(Template)的加持,还有模块(Module)助其一臂之力。Scribunto扩展(标准安装包中自带)允许创建用Lua语言编写的“模块”, 其中可以包括复杂的逻辑和文本处理。模块是Module:(中文模块:)命名空间中的页面。
要调用模块,你可以使用解析器函数#invoke,方式如下:

{{#invoke:模块名称|主|参数}}

MediaWiki脚本和样式

脚本是可重用的CSS样式、JavaScript代码或两者,可以在需要时动态加载。脚本可以为所有人运行,也可以仅为想要激活脚本的用户运行。它们类似于其他软件系统中的库或插件。
自定义脚本的样式或代码应在.css.js页面中定义,可以在MediaWiki:命名空间中(如果它们适用于所有人),也可以在特定用户的子页面中(如果用户想要自定义脚本,其他人仍然可以加载)。不过,仍然需要加载脚本才能生效。
MediaWiki会自动加载一些特定页面。对于注册用户,页面User:{name}/common.jsUser:{name}/common.css用于保存用户希望自动应用的JavaScript和CSS样式。你可以直接在这些页面上定义脚本,也可以通过在User:{name}/common.js页面上添加行来从其他页面加载脚本和样式:

# 加载外部脚本
mw.loader.load(
    '//en.wikipedia.org/wiki/User:Example/script.js?action=raw&ctype=text/javascript'
);

# 加载外部样式
mw.loader.load(
    '//en.wikipedia.org/wiki/User:Example/styles.css?action=raw&ctype=text/css', 'text/css'
);

将该页面名称和站点(示例使用英语维基百科)替换为你的源wiki和页面名称。
此外,MediaWiki:Common.js中的脚本和MediaWiki:Common.css中的样式对所有页面上的所有人(包括匿名用户)均启用。例如,如果你想让重定向页面的链接对所有人显示为绿色,你可以将以下内容添加到MediaWiki:Common.css

a.mw-redirect { color:green!important;}

要应用站点范围内的MediaWiki:Common.jsMediaWiki:Common.css,请将配置变量$wgUseSiteJs或设置$wgUseSiteCsstrue。要允许用户使用自己的JavaScript或CSS自定义功能或体验,请使用$wgAllowUserJs$wgAllowUserCSS

MediaWiki小工具

小工具是用户可自定义的实现某些功能的一组代码,可以添加到MediaWiki站点。它们类似于浏览器扩展,因为它们为用户提供附加功能。每个小工具都可以与JavaScript页面(提供要运行的代码)和/或CSS页面(提供要添加的样式)相关联。
小工具的好处在于,虽然默认情况下可以启用或禁用它们(相当于是否将代码添加到MediaWiki:Common.js),但登录用户还可以通过选择开启或关闭特定小工具来实现他们的偏好。此外,对于用户来说,启用新小工具比每次加载脚本要简单得多,尤其是对于新用户而言。
小工具是使用MediaWiki:Gadgets页面进行配置定义,底层脚本和样式位于MediaWiki:命名空间或扩展添加的Gadget:命名空间中。
例如,你想创建一个小工具,向编辑工具栏添加一个按钮,用于插入模板或格式代码。这将使用户更容易向其页面添加复杂的格式,而无需记住语法。
默认情况下,小工具不是MediaWiki的一部分,而是来自Gadgets扩展(标准安装包中自带)。要启用该扩展,请在配置文件LocalSettings.php中添加以下行:

wfLoadExtension( 'Gadgets' );

配置完成后,Special:Gadgets上会提供用户可读的摘要:
Special:Gadgets.png

MediaWiki微件

微件是可以嵌入到页面上的独立功能块。它们类似于其他软件系统中的插件或可嵌入组件。
微件是通过在相关命名空间中添加新页面来创建的。例如,可以在Widget:PDF创建在页面上嵌入PDF的小部件。要将小部件嵌入页面上,你可以使用特殊的语法,其中包括小部件的名称和任何参数。例如PDF微件,可以使用{{#widget:PDF|url=something.pdf}},其中微件名称后面的值是微件使用的参数。
mediawikiwidgets.org网站托管了数十个可以复制的现有微件的集合,从而简化了添加常用功能的过程。
默认情况下,微件不是MediaWiki的一部分,而是来自Widgets扩展(需自行下载安装)。要启用该扩展,请将下面的行添加到站点的配置文件LocalSettings.php中:

wfLoadExtension( 'Widgets' );

MediaWiki安全注意事项

请注意,允许运行自定义JavaScript的功能可能会带来安全风险。为所有人启用的脚本(在MediaWiki:Common.js中)、默认启用的小工具以及每个为每个人运行其代码的微件件——请务必将这些页面的编辑限制为只有最受信任的用户。默认情况下,只有interface-admin用户组的成员可以更改站点范围的脚本和小工具,而标准sysop(管理员)组的成员可以更改小工具。

最后修改:2025 年 01 月 13 日
如果觉得我的文章对你有用,请随意赞赏