2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

User:Greykid/参考手册/展开模板

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索

真·女神转生》大系数据编纂和样式设计统一模块 “模块:Psk” 的参考手册。操作细则和贡献方式,请进入《真·女神转生》大系编辑者群(832689630寻求进一步帮助。

本文讲述展开模板、HTML 标签、解析器函数 的实现方法。

frame:expandTemplate

此函数将展开指定的模板。

frame:expandTemplate{ title = title, args = table }

例如:

text = frame:expandTemplate{ title = 'Hash', args = {text} }

可以将 text 中的内容渲染为在 MediaWiki 环境下的:

{{Hash|text}}

以下是更复杂的例子,封装了一个 hover 函数,用以实现文字在鼠标悬浮时变化(手机版视图中为点击)的效果:

local function hover(frame, text1, text2)
  return frame:expandTemplate{ title = 'HoverInline', args = {text1, text2, 'before', 'center'} }
end

此例子使用了萌娘百科的 {{HoverInline}} 模板。

注意 Lua 中原先 “干净” 的字符串文本,并没有经过预渲染:

-- This is roughly equivalent to wikitext like {{template|{{!}}}}
frame:expandTemplate{ title = 'template', args = { '|' } }

-- This is roughly equivalent to wikitext like {{template|{{((}}!{{))}}}}
frame:expandTemplate{ title = 'template', args = { '{{!}}' } }

frame:extensionTag

此函数将展开指定的 HTML 标签。

frame:extensionTag( name, content, args )
frame:extensionTag{ name = string, content = string, args = table_or_string }

这种写法与「frame:callParserFunction() 调用 解析器函数 解析『#tag:』」近似是等价的:

-- These are equivalent
frame:extensionTag{ name = 'ref', content = 'some text', args = { name = 'foo', group = 'bar' } }
frame:extensionTag( 'ref', 'some text', { name = 'foo', group = 'bar' } )

frame:callParserFunction{ name = '#tag:ref', args = {
    'some text', name = 'foo', group = 'bar'
} }

-- These are equivalent
frame:extensionTag{ name = 'ref', content = 'some text', args = 'some other text' }
frame:callParserFunction{ name = '#tag:ref', args = {
    'some text', 'some other text'
} }

frame:callParserFunction

此函数将展开指定的 解析器函数

frame:callParserFunction( name, args )
frame:callParserFunction( name, ... )
frame:callParserFunction{ name = string, args = table }

以下这些写法是等价的:

-- {{ns:0}}
frame:callParserFunction{ name = 'ns', args = 0 }

-- {{#tag:nowiki|some text}}
frame:callParserFunction{ name = '#tag', args = { 'nowiki', 'some text' } }
frame:callParserFunction( '#tag', { 'nowiki', 'some text' } )
frame:callParserFunction( '#tag', 'nowiki', 'some text' )
frame:callParserFunction( '#tag:nowiki', 'some text' )

-- {{#tag:ref|some text|name=foo|group=bar}}
frame:callParserFunction{ name = '#tag:ref', args = {
    'some text', name = 'foo', group = 'bar'
} }

更多

Grey:以上三种方法中,「展开模板」的方法最稳定。特别是 MediaWiki 文本解析,调用 {{Eval}} 模板是一种现成的优秀解决方案。我曾经尝试移植 模块:Eval 到程序中,结果以失败告终。