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 );