我正在创建一个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文本?
代码示例:
<a href="<a href="http://www.google.com">http://www.google.com</a>">google</a>
使用此代码,如果我按原样运行,模板($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
。如果我取出<a href="<a href="http://www.google.com">http://www.google.com</a>">Search the web</a>
行,模板会在页面上保留为文字recursiveTagParse
,但外部链接可以正常运行。
答案 0 :(得分:2)
通常,解析器函数钩子({{#foo:param}})返回wikitext标记,而标记钩子(文本)返回HTML。
从函数钩子,你应该只需要返回'something something {{mytemplate}}',解析器的其余部分应该为你扩展模板 - 正是你想要的。
您能举一个具体的例子说明您正在做的事情 - 最好是一个完整的,可运行的代码示例 - 演示您不想要扩展的扩展内容吗?
答案 1 :(得分:0)
如果您只是从解析器函数返回wiki文本,它只会被部分解析。例如,不会渲染模板。
您自己调用解析器的方法是正确的。但是你需要告诉解析器已经解析了返回的输出:
return array( $parser->recursiveTagParse($output),
'noparse' => true, 'isHTML' => true );