跳至內容

幫助:替換參照

本頁使用了標題或全文手工轉換
來自維基學院
這是元維基上幫助文檔副本的中文翻譯,請參看元維基上的幫助文檔後再修改本文。

本文在元維基的原文是:meta:Help:Substitution



修飾詞「subst:」(「substitute」,「替代」)位於模板、變數、解析函數的「{{」之後。但subst對參數的「{{{」不起作用。

它能在參照頁面儲存時,將維基代碼自動替換,分別為:

  • 模板的維基代碼,而不是參照模板的維基代碼(例如{{template1}}),參數被替換成參數的值;
  • 變數的值;
  • 解析函數的值。

對模板的替換參照不會顯示在頁面歷史和模板的鏈入頁面等中。

樣例: Template:Tim,包含[[:Template:T2]],以{{subst:t2|[[a]]|{{tc}}}}方式參照,得到原始碼start_[[a]]_middle_{{tc}}_end,顯示為start_a_middle_Template:Tc_end。

注意到這種對模板的替換不會自動重複進行:如果被替換參照的模板又參照了其他模板,那個模板不會被替換參照。你可以隨後加上subst,做手動轉換。這種逐步的替換參照對於分析模板呼叫原理很有用。但是,複雜的是:

  • 如果參數名取決於另一個參數的預設值,那麼替換參照時這不會被計算。

如果你想修改替換參照生成的目標碼,你必須先儲存,因為預覽時替換參照還沒發生,替換參照只在儲存時發生。

另一種方式就是手動替換,複製模板的原始碼再編輯。另一種方式是使用「msgnw:」修飾詞(參見:Help:模板#msgnw)。

對「~~~~」進行替換參照沒有效果。

對變數替換參照與對模板的類似。比如時間戳:

{{subst:CURRENTYEAR}}年{{subst:CURRENTMONTHNAME}}{{subst:CURRENTDAY}}日, {{subst:CURRENTTIME}} (UTC)

得到:

2024年12月21日, 15:40 (UTC)

解析函數

[編輯 | 編輯原始碼]

對解析函數的替換參照與模板一樣,但是「subst:」與「#」之間不能有分隔。例如:

{{subst:#time:c}}

得到 2012-02-08T08:08:32+00:00

nowiki與pre

[編輯 | 編輯原始碼]

如果某模板包含位於nowiki或pre標記之內的簽章或替換參照,他們將被解釋並展開,但nowiki或pre標記仍保留。

條件替換技術

[編輯 | 編輯原始碼]

是否進行替換可由特定參數決定,由此還可進行多重替換。原理如下:

  • 頁面A包含{{subst:B|subst=subst:|参数...}}
  • template:B包含{{{{{subst|}}}C|subst={{{subst|}}}|参数...}}
  • template:C包含{{{{{subst|}}}D|subst={{{subst|}}}|参数...}}
  • 以此類推

當頁面A對template:B的參照包含「subst=subst:」時,template:B對template:C的參照也是替換參照,template:C對template:D也是。若頁面A不含「subst=subst:」時,便不會替換,且不會出現錯誤。由此,條件替換和多重替換可以實現。

基於參照的替換

[編輯 | 編輯原始碼]

在被替換的模板中使用「僅包含」和「不包含」標籤,可以在參照時實現魔術般的技巧。

代碼~<includeonly>~</includeonly>~~顯示為~~~,當被參照時顯示為~~~~,當被替換參照時展開為用戶簽章。而當一包含了{{<includeonly>subst:</includeonly>CURRENTTIME}}的模板被替換參照並儲存時,不變的時間就被儲存在維基文字中,替換了隨時間變化的時間變數。變數也是如此。樣例:

  • 在Template:Demo中儲存{{CURRENTTIME}},原始檔為{{CURRENTTIME}}
在頁面中儲存{{Demo}},原始檔為{{Demo}},頁面顯示出變化的當前時間15:40;
在頁面中儲存{{subst:Demo}},原始檔為{{CURRENTTIME}},頁面顯示出變化的當前時間15:40;
  • 在Template:Demo中儲存{{subst:CURRENTTIME}},原始檔為07:37
在頁面中儲存{{Demo}},原始檔為{{Demo}},頁面顯示出不變的模板儲存時間07:37;
在頁面中儲存{{subst:Demo}},原始檔為{{subst:CURRENTTIME}},頁面顯示出不變的模板儲存時間07:37;
  • 在Template:Demo中儲存{{<includeonly>subst:</includeonly>CURRENTTIME}},原始檔為{{<includeonly>subst:</includeonly>CURRENTTIME}}
在頁面中儲存{{Demo}},原始檔為{{Demo}},頁面顯示出{{subst:CURRENTTIME}};
在頁面中儲存{{subst:Demo}},原始檔為07:37,頁面顯示出不變的頁面儲存時間07:37;

簡單的說:僅包含標籤可被用於專門被替換參照的模板、變數,即在subst:前後加上僅包含標籤。

使用限制

[編輯 | 編輯原始碼]

模板內部如果嵌入了參照替換方式的其它模板或者有參照替換效果的簽名~~~、~~~~、~~~~~時,模板自身也只能以參照替換的方式使用,即以{{subst:模板名|相關參數}}的方式來使用模板。比如模板A裏包含了

這是一個關於{{<includeonly>subst:</includeonly>B}}的例子

那麼,只能這樣使用模板A:

{{subst:A}}

其他修飾詞

[編輯 | 編輯原始碼]

自動產生模板的原始碼。

safesubst

[編輯 | 編輯原始碼]

用於同時替換參照和巢狀的模板。