我正在創建FunctionHook
擴展(wikitext中的{{#foo:bar}}
),該文檔根據文檔具有擴展模板的輸入參數,輸出應爲wikitext。在函數擴展中展開模板
問題是我想要輸出的一部分添加一個模板到頁面。但它是作爲模板的原始wiki文本進入的,因爲模板擴展已經發生。我知道有一個$parser->recursiveTagParse($output, $frame)
命令可用,但是當我這樣做,模板得到擴展,如鏈接wikitext的,它打破外部鏈接([http://google.com google]
變得<a href="http://google.com">google</a>
,它被再解析成<a href="<a href="http://www.google.com">http://www.google.com</a>">google</a>
)
那麼,有沒有一個命令,可以從FunctionHook擴展中調用擴展模板而不擴展其他wiki文本?
代碼示例:
$wgHooks['ParserFirstCallInit'][] = 'fooBar_Setup';
$wgHooks['LanguageGetMagic'][] = 'fooBar_Magic';
function fooBar_Setup(&$parser) {
$parser->setFunctionHook('fb', 'fooBar_Render');
return true;
}
function fooBar_Magic(&$magicWords, $lang) {
$magicWords['fb'] = array(0, 'fb', 'foobar');
return true;
}
function fooBar_Render($parser, $param1) {
$output = '{{prettyOutput|'.$param1.'}} [http://www.google.com Search the web]';
$output = $parser->recursiveTagParse($output);
return $output;
}
有了這個代碼,如果我運行原來的樣子,模板(prettyOutput
)被列爲預期,但谷歌的鏈接獲取雙解析併成爲<a href="<a href="http://www.google.com">http://www.google.com</a>">Search the web</a>
。如果我取出recursiveTagParse
行,模板將保留爲頁面上的文字{{prettyOutput|myInput}}
,但外部鏈接正常工作。