Module:Wikitable
跳到导航
跳到搜索
本模板基于enwp:Template:Wikitable的思路重写,理论上在语法无误的前提下效果一致。
简介
本模板主要用于简化嵌套在其它模板内的表格。例如,如果想在{{tabs}}中显示表格,需要对表格中的管道符和等于号(即“|”和“=”)使用{{!}}和{{=}}转义,否则表格将无法正常显示。这一额外步骤会使表格变得难以阅读和编写。为了解决这个问题,可以使用本模板,例如:
{{table | class="wikitable" |- ! 标题1 !! 标题2 |- | 内容1 || 内容2 |- | 内容1 || 内容2 }}
最终显示效果与使用表格相同。
标题1 | 标题2 |
---|---|
内容1 | 内容2 |
内容1 | 内容2 |
注意:除了表格第一行可以直接使用=
以外,其他地方的等于号请使用{{=}}
代替。
与使用表格的对比
前后对比如下:
使用表格而不是本模板:
{{tabs |bt1=分页名称 |tab1=分页内容 {{{!}} class="wikitable" {{!}}- ! 标题1 !! 标题2 {{!}}- {{!}} 内容1 {{!}}{{!}} 内容2 {{!}}- {{!}} 内容1 {{!}}{{!}} 内容2 {{!}}- {{!}} colspan="2" {{!}} 跨列内容 {{!}}} }}
效果如下:
分页名称
分页内容
标题1 | 标题2 |
---|---|
内容1 | 内容2 |
内容1 | 内容2 |
跨列内容 |
使用本模板:
{{tabs |bt1=分页名称 |tab1=分页内容 {{table | class="wikitable" |- ! 标题1 !! 标题2 |- | 内容1 || 内容2 |- | 内容1 || 内容2 |- | colspan{{=}}"2" | 跨列内容 }} }}
效果如下:
分页名称
分页内容
标题1 | 标题2 |
---|---|
内容1 | 内容2 |
内容1 | 内容2 |
跨列内容 |
两种写法最终效果相同,但使用本模板可以显著简化代码。
|
- local getArgs = require('Module:Arguments').getArgs
- local p = {}
- function p.main(frame)
- local args = getArgs(frame, {
- removeBlanks = false,
- trim = false
- }) -- 保留空格和换行
- return p._main(args)
- end
- function p._main(args)
- local buffer = {'{|'} -- 表格开头的{|
- for k, v in pairs(args) do
- -- 没记错的话Lua输入命名参数后是没法按照顺序呈现的,因此需要通过遍历查找命名参数,即表格第一行<table>中的class等内容
- if type(k) ~= 'number' then
- --[=[
- 表格第一行,此时直接读入的参数不包括等号前面的内容,
- 例如class="wikitable"只会读入一个键为class、值为"wikitable"的参数,需要手动将前面的class=加上去。
- ]=]
- table.insert(buffer, string.format(' %s=%s', k, v))
- end
- end
- table.insert(buffer, '\n')
- for _, v in ipairs(args) do
- table.insert(buffer, '|')
- table.insert(buffer, v)
- end
- -- 补上结尾的|},然后将表串起来并返回
- table.insert(buffer, '\n|}')
- return table.concat(buffer)
- end
- return p;