模块(Module)是一个MediaWiki的官方插件功能。该插件允许编写者在MediaWiki中,使用Lua语言来编写模块,完成一些批量工作的处理。模块可以理解为是一个“高级形态”的模板

什么是模块

模块是Lua在MediaWiki执行的基础,Lua代码必须被写成若干个“模块”进行使用。

所有模块,需要建立在命名空间Module:模块:)下。

为什么要使用模块

在复杂的模板中,我们通常会使用各种解析器函数来实现类似程序语言的逻辑判断和循环(比如{{#if}})。

当一个模板比较简单,只会使用到少量解析器函数的时候,解析器函数是一个非常方便的功能。

但是,当一个模板需要做大量逻辑判断、循环之类功能的时候,就会导致模板的代码臃肿不堪,陷入由{{}}组成的花括号地狱当中,这样的模板难以阅读和维护外。

这种时候就更适合使用模块来进行编写。模块使用了真正的程序语言Lua,使其可以处理更复杂的逻辑判断,也使代码的可读性更高,所以可以更轻松的制作出功能更丰富、也更利于维护的模板。此外,Lua的运行效率也比解析器函数高一些,可以提升一些页面的生成速度。


如何调用模块

在MediaWiki中,可以使用解析器函数|{{#invoke}}{{#调用}})调用一个模块中的一个函数。

{{#invoke:模块名|函数名|参数1|参数2...}}

模块名指的是页面标题Module:XXX中的XXX。参数的写法和模板参数的写法是相同。

基础教程

Lua.jpg

基础教程部分,是通过一系列例子,来讲解如何编写模块,让模块可以完成原本通过模板承担的工作。阅读这部分内容,需要对MediaWiki的模板有一定了解。

标题 说明
Hello world 编写我们的第一个Hello world模块
替换模板入门 使用模块来替换掉简单的模板
function的调用 模块之间不同function之间的调用
HTML的渲染 讲解在Lua中,如何来生成HTML内容

进阶教程

进阶教程部分,是讲解Lua语言的基本知识,以及常用的Lua函数/库,以及MediaWiki额外提供的库。

Lua难学吗?

Lua是一个入门级别的编程语言,对于已经能够熟练运用解析器函数的维基开发者而言,只需要简单学习Lua的语法即可。如果您学习过甚至掌握任意一种真正的编程语言(譬如JS、Python甚至是VBA)都可以迅速的上手Lua

标题 说明
数据类型 介绍Lua中的数据类型
字符串 介绍Lua中的数据类型string,以及MediaWiki中对UTF-8编码的string操作库Ustring
变量 介绍Lua中变量的声明、赋值等
运算符 介绍Lua中可以使用的运算符
分支结构 介绍Lua中的分支结构(if
循环结构 介绍Lua中的循环结构(forwhilerepeat...until
函数 介绍Lua中的函数(数据类型function
介绍Lua中的表(数据类型table),以及操作表的库table的使用方法
数组 介绍Lua中的数组(数据类型table的一种应用方式)
跨模块调用 介绍Mediawiki中,模块文件之间的互相引用,用来优化代码结构(require
MongoDB读取JSON内容 NEW 介绍在huijiWiki中,如何使用MongoDB语法来操作JSON数据(mw.huiji.db.*

其他

相关文档

WIKI开发实例

以下托管在灰机wiki的站点大量使用的Lua构建的模块,您可以自行访问该站点并阅读代码,以作为学习的参考

除此之外,灰机上还有许多使用Lua模块的站点,您可以自行发现或者在我们的交流群中向开发者提问

avatar
0

@SerGawen 请问SMW的Lua接口有没有文档?

2年
0

看到了,有action

2年
avatar
Reasno
0

这页就这样吧,代码这种东西,还是应该看英文文档 不懂得也很难教 强行翻译成中文的话可能还会丢失很多信息。

4年
avatar
Reasno
0

@SerGawen 你看如何

4年
avatar
SerGawen
0

回复@Reasno:我看行 挺好的~

4年