2023年政策修订增补工作正在进行中,欢迎参与!
User:Greykid/参考手册/展开模板
< 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 到程序中,结果以失败告终。