2023年政策修订增补工作正在进行中,欢迎参与!
使用者: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 到程序中,結果以失敗告終。