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

使用者: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 到程序中,結果以失敗告終。