我在使用wikitext渲染标记处理时遇到问题。
public static function onTagRender( $input, array $args, $parser, $frame ) {
...
$text = $parser->recursiveTagParse($sometext, $frame);
...
return $text;
}
如果$ sometext包含例如
"Example from page [[XYZ]]"
然后我希望返回的$ text应该包含
"Example from page <a href="/wiki/XYZ" title="XYZ">XYZ</a>"
但我只得到
"Example from page <!--LINK 0:0-->"
我也尝试了$ parser-&gt; replaceInternalLinks(),但结果相同。我忽略了什么?
答案 0 :(得分:0)
Parser :: recursiveTagParse只做部分渲染,afaik。这可能是也可能不是问题。要完全呈现任何用户输入,您必须创建解析器函数(http://www.mediawiki.org/wiki/Manual:Parser_functions)而不是标记函数。
请参阅http://www.mediawiki.org/wiki/Manual:Tag_extensions#How_do_I_render_wikitext_in_my_extension.3F
答案 1 :(得分:0)
如果有些人遇到同样的问题,请尝试在replaceLinkHolders
之后调用 recursiveTagParse
。 (我没有遇到同样的问题,所以我没有对它进行测试。)
所以在OP的代码片段中,那就是:
public static function onTagRender( $input, array $args, $parser, $frame ) {
...
$text = $parser->recursiveTagParse($sometext, $frame);
$text = $parser->replaceLinkHolders($text);
...
return $text;
}
根据我的理解解释:
实际上,通常的parse
方法调用internalParse
方法 - 它执行大部分工作 - 然后执行其他一些操作。另一方面,recursiveTagParse
几乎只调用internalParse
,因此它不会执行parse
中的其他内容。
问题是,链接分两步解析:
LinkHolderArray
,然后在文本中将其替换为<!--LINK $ns:$key-->
(由replaceInternalLinks
完成,由internalParse
调用,这样就可以了。) <!--LINK $ns:$key-->
标记解析为HTML链接
(由[{1}}完成,由replaceLinkHolders
调用,而不是parse
调用,因此不是internalParse
调用。)