Я создаю расширение FunctionHook
({{#foo:bar}}
в викитексте), которое согласно документации имеет входные параметры с расширенными шаблонами, а на выходе должен быть викитекст.
Проблема в том, что я хочу, чтобы часть вывода добавила шаблон на страницу. Но он появляется как необработанный вики-текст для шаблона, потому что расширение шаблона уже произошло. Я знаю, что доступна команда $parser->recursiveTagParse($output, $frame)
, но когда я это делаю, шаблоны расширяются, как ссылка на викитекст, который разрывает внешние ссылки ([http://google.com google]
становится <a href="http://google.com">google</a>
, который снова анализируется в <a href="<a href="http://www.google.com">http://www.google.com</a>">google</a>
)
Так есть ли команда, которая может быть вызвана из расширения FunctionHook для расширения шаблонов без раскрытия другого вики-текста?
Пример кода:
$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
) включается, как и ожидалось, но ссылка Google переходит на двойной анализ и становится <a href="<a href="http://www.google.com">http://www.google.com</a>">Search the web</a>
. Если я вычеркну строку recursiveTagParse
, то шаблон останется на странице буквально {{prettyOutput|myInput}}
, но внешняя ссылка будет работать правильно.