在函数扩展中展开模板

时间:2011-05-13 16:14:16

标签: mediawiki

我正在创建一个FunctionHook扩展名(wikitext中为{{#foo:bar}}),根据文档中的扩展模板输出参数,输出应为wikitext。

问题是我想要输出的一部分来向页面添加模板。但它作为模板的原始wikitext进入,因为模板扩展已经发生。我知道有一个$parser->recursiveTagParse($output, $frame)命令可用,但是当我这样做时,模板会被扩展,以便链接wikitext,这会破坏外部链接([http://google.com google]变为<a href="http://google.com">google</a>,它会再次被解析为{ {1}})

那么是否可以从FunctionHook扩展中调用一个命令来扩展模板而不扩展其他wiki文本?

代码示例:

&lt;a href="<a href="http://www.google.com">http://www.google.com</a>"&gt;google&lt;/a&gt;

使用此代码,如果我按原样运行,模板($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; } )会按预期包含在内,但Google链接会被双重解析并变为prettyOutput。如果我取出&lt;a href="<a href="http://www.google.com">http://www.google.com</a>"&gt;Search the web&lt;/a&gt;行,模板会在页面上保留为文字recursiveTagParse,但外部链接可以正常运行。

2 个答案:

答案 0 :(得分:2)

通常,解析器函数钩子({{#foo:param}})返回wikitext标记,而标记钩子(文本)返回HTML。

从函数钩子,你应该只需要返回'something something {{mytemplate}}',解析器的其余部分应该为你扩展模板 - 正是你想要的。

您能举一个具体的例子说明您正在做的事情 - 最好是一个完整的,可运行的代码示例 - 演示您想要扩展的扩展内容吗?

答案 1 :(得分:0)

如果您只是从解析器函数返回wiki文本,它只会被部分解析。例如,不会渲染模板。

您自己调用解析器的方法是正确的。但是你需要告诉解析器已经解析了返回的输出:

return array( $parser->recursiveTagParse($output), 
              'noparse' => true, 'isHTML' => true );