Mediawiki 在函数扩展中展开模板
我正在创建一个Mediawiki 在函数扩展中展开模板,mediawiki,Mediawiki,我正在创建一个FunctionHook扩展({{{foo:bar}},在wikitext中),根据文档,它具有扩展模板的输入参数,并且输出应该是wikitext 问题是我希望部分输出向页面添加模板。但它作为模板的原始wikitext出现,因为模板扩展已经发生。我知道有一个$parser->recursiveTagParse($output,$frame)命令可用,但当我这样做时,模板会被扩展,就像链接wikitext一样,它会断开外部链接([http://google.com 谷歌]变成了,它再
FunctionHook
扩展({{{foo:bar}}
,在wikitext中),根据文档,它具有扩展模板的输入参数,并且输出应该是wikitext
问题是我希望部分输出向页面添加模板。但它作为模板的原始wikitext出现,因为模板扩展已经发生。我知道有一个$parser->recursiveTagParse($output,$frame)
命令可用,但当我这样做时,模板会被扩展,就像链接wikitext一样,它会断开外部链接([http://google.com 谷歌]
变成了
,它再次被解析为a href=”“谷歌/a
)
那么,是否有一个命令可以从FunctionHook扩展中调用,以在不扩展其他wikitext的情况下扩展模板
代码示例:
$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=”“Search the web/a
。如果我去掉recursiveTagParse
行,模板在页面上保持为literal{{prettyOutput | myInput}}
,但是外部链接工作正常。通常解析器函数钩子({{{foo:param})返回wikitext标记,而标记钩子(text)返回HTML
从函数钩子中,您应该只需要返回'something something{{mytemplate}}',解析器的其余部分应该为您展开模板--这正是您想要的
你能给出一个具体的例子来说明你在做什么吗?最好是一个完整的、可运行的代码例子,来演示你不想扩展的内容吗?如果你只是从解析器函数返回wiki文本,它只会被部分解析。例如,将不呈现模板 您自己调用解析器的方法是正确的。但是您需要告诉解析器返回的输出已经被解析:
return array( $parser->recursiveTagParse($output),
'noparse' => true, 'isHTML' => true );