0

私は現在、親タグ (私の場合は<tabs>) が子タグ (私の場合は ) の内容に影響を与えることができる必要がある、ネストされたタグ拡張機能の作成に取り組んでい<tab>ます。タグの内容を実行するだけでこれを実行しようとしまし$parser->recursiveTagParse($input)たが、返された文字列では、何にも一致しないようです。これを可能な限り最も基本的な方法でテストするために、次のことを行いました。$input<tabs>

LocalSettings.php に追加:

require_once "$IP\\extensions\\Test\\Test.php";

Test ディレクトリに Test.php を作成します。

<?php
$wgAutoloadClasses['Test'] = __DIR__ . '/Test.body.php';
$wgHooks['ParserFirstCallInit'][] = 'Test::init';

以下を使用して Test.body.php を作成します。

<?php
class Test {
    public static function init( &$parser ) {
        $parser->setHook( 'testfoo', array( 'Test', 'firstTag' ) );
        $parser->setHook( 'testbar', array( 'Test', 'secondTag' ) );
        return true;
    }

    public static function firstTag($input, $attr = array(), $parser, $frame) {
        $newinput = $parser->recursiveTagParse($input);
        return preg_match_all("/ /", $newinput);
    }

    public static function secondTag($input, $attr = array(), $parser, $frame) {
        return htmlspecialchars($input);
    }
}

最後に、wiki のページに次のように記述します。

<testfoo>three spaces out here<testbar>and four more spaces here</testbar></testfoo>

7出力文字列には 7 つのスペースがあるため、これにより be の最終出力が作成されます。問題は、これが代わりに、タグ3の外側にあるスペースの量を返すことです。<testbar>

私が知りたいのは、ネストされたタグの解析結果<testbar>を一致および/または置換することがまったく可能かどうか (つまり、ネストされたタグが出力するもの) であり、それが不可能な場合は、タグを作成することは可能ですか?<testfoo>タグ内にネストすると動作が異なりますか?


PPFrameネスティングを検出できるようにするために、 の部分に 2 番目の引数として追加しようとしました$parser->recursiveTagParse($input)が、PPFrame のドキュメントが不明瞭すぎて、何をする必要があるのか​​ わかりません。ドキュメントの内容に基づいて、私が今行っていることは次のとおりです。

    public static function firstTag($input, $attr = array(), $parser, $frame) {
        $newframe = $frame->newChild(array('nested'=>'true'), $frame->getTitle(), 0);
        $newinput = $parser->recursiveTagParse($input, $newframe);
        return preg_match_all("/ /", $newinput);
    }

しかし、それはエラーを引き起こします。私がそれを行うとき、それは次のように言います:

注意: C:\hiddenpath\w\includes\parser\Preprocessor_DOM.php の 984 行目で非オブジェクトのプロパティを取得しようとしています

キャッチ可能な致命的なエラー: DOMXPath::__construct() に渡される引数 1 は DOMDocument のインスタンスでなければなりません。指定された null は、C:\hiddenpath\w\extensions\Test\Test.body.php の 10 行目で呼び出され、C で定義されています。 \hiddenpath\w\includes\parser\Preprocessor_DOM.php 行 984

しかし、これを修正するために何をする必要があるのか​​ わかりません。最初の引数を特別なオブジェクトにする必要がありますか? もしそうなら、なぜドキュメントは最初の引数として配列を置く必要があると言っているのですか?

4

1 に答える 1