1

タグ処理のためのフックでのウィキテキストのレンダリングに問題があります。

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->replaceInternalLinks() も試しましたが、同じ結果になりました。私は何を見落としましたか?

4

2 に答える 2

1

同じ問題に遭遇した人がいる場合は、 の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
問題は、リンクが 2 つのステップで解析されることです。

  1. リンクは最初に に抽出され、テキスト内でLinkHolderArrayに置き換えられ<!--LINK $ns:$key-->ます。
    (これは によって行われreplaceInternalLinks、 によって呼び出されるinternalParseので、問題ありません。)
  2. 次に、<!--LINK $ns:$key-->マーカーが HTML リンクに解析されます。
    (これは によって行われ、 によってではなく によってreplaceLinkHolders呼び出されるため、 によってではありません。)parseinternalParserecursiveTagParse
于 2014-07-02T04:01:41.293 に答える
0

Parser::recursiveTagParse は、部分的なレンダリングのみを行います。それが問題かもしれませんし、そうでないかもしれません。ユーザー入力を完全にレンダリングするには、タグ関数の代わりにパーサー関数 ( 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を参照してください。

于 2013-07-18T13:54:21.177 に答える