如果你不经意间发现了这篇文章,而你也刚好安装了自己的 MediaWiki,并且很想把它装点得更漂亮些,那么机会来了。我完全可以理解,当默认安装完之后,随着插件、模块以及模板的设置,你的折腾之旅也就开始了,这是否出乎你的意料之外:它可不仅仅是改改标题和头部文件、将文本字体改成粗体或者是斜体、创建超链接或者是 wiki 内链接这些而已。
拥有自己的 MediaWiki 是件很有乐趣的事,但是既然你选择了 MediaWiki 而不是其他更灵活的——比方说 TikiWiki——也就意味着你希望它看起来跟维基百科一样好——或者是看上去更加专业——事实上也确实如此。为此,你必须安装大量额外的东西。在这篇文章中,我会逐步教会你们如何做到。
如果你还没有准备好,我强烈建议你可以从《用 WikiEditor 替换默认的 MediaWiki 编辑器》入手:在文章中我们会解释如何达到目的。
在这之后,你可能会想要达到下图所示那样的东西:
mediawiki-ambox-example-768x405.jpg
好的,我们将讨论的是异常复杂并能提供消息的 Message Box,论文中的额外引用。可能你早就知道,它是个模板,MediaWiki 中最了不起的几个特性之一。一个模板就是基本的一组标准化的内容,可以被插入到不同的页面中,提供一个简单的接口能轻易地改变文本(或者图片或者行为)以匹配你正使用的页面。事实上,使用模板能够节省我们大量的工作,因为我们能够反复利用那些没必要每次都得重复的事。

理解模板

是否意味着我们必须要手工设计模板?幸运的是,我们无需这么做:事实上,MediaWiki 的模板是可以在不同的 MediaWiki 中导入导出的,也就是说你可以轻而易举地使用维基百科的模板而不必煞费苦心地自己设计。无论如何,在开工前我们还是要学习一些关于模板如何工作的知识。

模板如何工作

要学习模板的工作原理,最简单的方法就是创建一个自己的模板。打开你的 MediaWiki 然后新建一个Template:MyFirst的页面,内容如下:
''Hi! This is my first template.''
然后再创建另外一个页面,就叫它MyFirstTest好了,输入如下内容:

Hello, this is a page meant to test the '''MyFirst''' template.
Here it is:

{{MyFirst}}

Pretty neat, isn't it?

然后,瞧一下你刚刚创建的页面,是不是如下图这样:
mediawiki-template-sample.jpg
模板就是这么工作的。想要进一步了解更多,包括如何使用模板参数,我强烈建议你读一下MediaWiki官网上的这篇文章

高级模板

我们不会涉及太多有关高级模板内容的:为了简单起见,我们将在导入它们之前将一些核心内容提炼一下:

  • 一个模板可以包含另外一个模板:也就是说我们可以创建一个Template:MySecond的模板,然后在它的内容中引用之前的{{MyFirst}},就跟我们创建MyFirstTest页面一样。这个在诸如维基百科的wiki站点中是非常实用的,那里有大量像Metatemplates这样的模板,然后一组用于后台一组用于前端。
  • 模板可以通过一个或者是多个变量到元模板中:我们能通过后端模板“开放”一些元模板的变量,由此使它更加多功能:我们也可以提供某些默认值给这些产量,如果用户没有给其一个明确值。
  • 模板是可以调用插件的:包括那些可用函数(ParserFunctions)和/或者模块(Scribunto)的用法。这是最高级的—也是很强大的—模板用法,它允许在MediaWiki中使用代码语言(比如LUA),因此在某些模板中就可以有无限的特性。

    待办事项列表

    在必要的介绍之后,是时候给完成任务该做的列一个清单了:

  • 升级我们的MediaWiki到最新的稳定版,匹配维基百科的。
  • 安装Scribunto插件,然后适当地设置好。
  • 导出/导入LUA模块,你希望使用并且要导入到你的MediaWiki中的模板。
  • 导出/导入维基百科的模板,你想使用的,连同所有必要的元模板一起导入到你的MediaWiki中。
    复制相关的CSS类,将维基百科中Common.css文件中的内容黏贴到自己MediaWiki的Common.css。
    激活MediaWiki的IstantCommons,该特性能够自动从commos.wikipedia.com中获取模板图片。
    这就些,你准备好开始了吗?
    注意:
    国内网络无法浏览中文维基百科,因此以下教程采用英语环境下的导出界面。

    升级你的MediaWiki

    如果我们想使用维基百科的模板,我们就必须确认自己的MediaWiki可以支持它们。MediaWiki,基本上每年都会有许多升级,它们的模板也同样如此,一点不比它少。维基百科的核心是由MediaWiki项目扩展出来的,所以同样会升级,包括它的模板:简而言之,就是你想用人家的东西,那你就得升级成跟人家一样吧!
    你可以检验一下维基百科的当前版本,具体见如下页面:
    https://en.wikipedia.org/wiki/Special:Version
    在你升级站点以匹配它前,你可以检查一下changelog,如果在最新稳定版的中断过程,包括大部分相关的扩展:如果没有,你可以试着保持,另外你就得更新。不消说,你只需考虑第一次:一旦你导入模板,你就可以在之后免费使用……,直到你需要导入更多的模板!
    升级你的MediaWiki,你可以或者在官网中下载完全版。我强烈建议采用后者,由此你将获得扩展和样式(它们同样需要更新),不必手工获取。
    升级的指令可能会非常不同,具体取决于你已经拥有的内部版本和/或要升级到的内部版本。通用标准就是,不要小看MediaWiki的升级过程。这个程序一点都不简单,不像其他PHP应用那样几秒钟就能搞定。你必须紧跟指示并且最好中断你的运行环境:你也可能被要求从命令行中运行PHP代码,改动你当前的数据库,升级如ImageMagic、Python、GostScript等第三方的库,甚至是你的PHP核心。

    安装Scribunto

    Scribunto(拉丁语写法)是一个革命性的扩展,它允许MediaWiki编辑者嵌入一种或者多种脚本语言到MediaWiki中。现在只需要支持LUNA一种脚本语言就行,有很多理由可以令你做出这样一个明智的选择:对于没有经验的程序员简单友好的符号,快速的表现(JIT-compiler),良好的文档,简单强大的调试特性,社区支持。当然它也有缺点,但是不影响你在MediaWiki上使用。
    安装和设置Sciribunto,只需要从官网上下载。确定你选择的是正确版本:起码要保证匹配你的安装(或者更低):如果你不确定,可以去你的MediaWiki站点内的/Special:Version页面上瞧一下,在右侧已安装软件中会显示。一旦你获得扩展,将它解压缩到站点/extensions/目录下面。
    结束前还得做
    <mediawiki_folder>/extensions/scribunto/<scribunto_files>
    做完之后,打开你的LocalSettings.php文件,然后在关联其他扩展(比如开始于wfLoadExtension)的后面添加如下行:

    require_once "$IP/extensions/Scribunto/Scribunto.php";
    $wgScribuntoDefaultEngine = 'luastandalone';

    从1.30版本开始,启用Sciribunto扩展采用如下代码,其他不变:

    wfLoadExtension( 'Scribunto' );

    如果你正在使用MediaWiki的SyntaxHighlight插件(更多信息请参看这里),同样地你也可能需要将下面的代码添加到Lua源代码。

    $wgScribuntoUseGeSHi = true;

    就这些。

    导出/导入模块

    现在我们已经有了Scribunto插件了,它也可以支持LUA模块了。这里有一张清单,就是我们需要导入的维基百科的信息框模板,也就是我们在文章开头提到过的,它被称为Refimprove并建立在Ambox元模板之上,而后者又建立在Message_box模块之上(你是否已经开始明白为什么我们要这么做了?)
    这里是一张我们需要的模块的列表:

  • Module:Message_box
  • Module:Message_box/configuration
  • Module:No_globals
  • Module:Category_handler
  • Module:Yesno
    要导出它们的话,打开维基百科导出页面,然后在多文本框“Add pages manually”中手动添加,如下图:
    Wikipedia-Export-pages.png
    确保三个选择框都被选中,包括include templates那个,通常情况下默认是没有被勾选的,然后点击“Export”按钮。一个XML文件将会生成并被下载:保存到一个临时文件夹中,然后再新开一个标签页链接到你的wiki站点的Special:Import页面。
    如果你没有找到它,可以到左边导航栏的特殊页面中,下拉到“页面工具”那栏,选中导入页面。
    至此,导入之前下载的文件然后选择“导入到默认位置”的选项,程序将自动执行。完成效果如下:
    Import-LUA-Complete.png

    导出/导入模板

    我们现在已经有了模块,接下去需要对模板做同样的事。回到维基百科导出页面,然后在“Add pages from category”文本框内输入如下内容:

  • Category:Mbox_and_messagebox_templates

当你点击添加按钮时,下面的文本框中将自动填充该分类中的所有模板。回到上面的文本框,继续相同的任务,输入如下的内容:

  • Category:Article_message_templates
    另外一种模板的条理也被安装好了。那是所有我们需要Refimprove模板——同样有上百个类似的。
    从技术上来讲,我们将获得所有Article Message Templases,连同它们一起的模块/元模板。我们这么做事因为比起手工选择我们想要的模板要容易些。如果我们不想要,我们也可以很自由地删除我们不想要的。
    再次,点击输出按钮然后保存XML文件到本地。回到我们自己站点的导入页面,像导入模块那样导入那些我们想要的模板。

    复制CSS类

    为确保我们的消息框看上去跟维基百科的一样,我们需要复制维基百科MediaWiki:Common.css特殊页上相关的部分到我们自己的站点文件。

    激活IstantCommons

    最后一件要做的事情就是激活维基百科的IstantCommons特性,它可以自动地从commons.mediawiki.com站点上获取所需要的图片:如果你想了解更多关于IstantCommons的信息,可以读一下这篇文章。
    自从MediaWiki的1.6版本发布以来,要使用IstantCommons特性只要在LocalSettings.php文件中简单加入以下内容就可以了:
    $wgUseInstantCommons = true;
    注意:
    该功能在国内网络环境下可能会导致页面打开严重超时,所以除了最初测试站点时使用一下,强烈建议在后期关闭该功能。详细可参考本站另一篇文章《》。

    问题汇总

    这里有一张常见问题的清单,是你在执行过程中可能会碰到的问题以及如何修复的一些建议。

    导入问题

    如果你在自己的wiki站点上导入XML文件时收到这些错误信息:

      Warning: XMLReader::open(): Unable to open source data in /.../wiki/includes/Import.php on line 53
      Warning: XMLReader::read(): Load Data before trying to read in /.../wiki/includes/Import.php on line 399

https://www.mediawiki.org/wiki/Topic:Rfg97bdjf2u3rqti

注意:如果在导入比较大的文件(含有大量模板)时发生错误,建议将各个模板单独导出并导入。

原文链接:《How to import Wikipedia Templates into your own MediaWiki

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