Manual:Parser functions/ja

From MediaWiki.org

Jump to: navigation, search
Crystal Clear app tutorials.png タグの拡張機能 パーサー関数 フック 特別ページ スキン マジックワード

[edit] パーサ関数

タグ拡張機能はテキストを処理せずにHTMLを返すことが期待されます。パーサの残りとの統合は事実上存在しません; 例えば拡張機能の出力はテンプレートパラメータとして使用されます。拡張機能タグの範囲内でテンプレートを拡張することは可能ですが、多くは手作業で行われます -- バージョンからバージョンまで変更する間違いが起こりやすいプロセスだからです。

1.7以降で利用可能なパーサ関数はテンプレートと他のパーサ関数をより密接に統合する方法を提供します。1.6で未開発のパーサ関数が存在しますが、使うことはお勧めしません。APIと構文に違いがあるからです。

    • パーサ関数のように提案されたモデレーションと1.6.8で十分に動作するようです。

パーサ関数の典型的な構文は以下の通りです:

{{ #functionname: param1 | param2 | param3 }}

パーサ関数の作成はタグフックを作成するよりも少し込み入っています。関数名がマジックワードでなければならないからです。マジックワードは一種のキーワードでエイリアスとローカライゼーションをサポートします。下記のコードはパーサ関数を作成する拡張機能の例です。

<?php
 
# セットアップ関数を定義する
$wgExtensionFunctions[] = 'wfExampleParserFunction_Setup';
# マジックワードを初期化するためにフックを追加する
$wgHooks['LanguageGetMagic'][]       = 'wfExampleParserFunction_Magic';
 
function wfExampleParserFunction_Setup() {
	global $wgParser;
	# 我々の関数と"example"マジックワードを結びつける関数フックを設定します
	$wgParser->setFunctionHook( 'example', 'wfExampleParserFunction_Render' );
}
 
function wfExampleParserFunction_Magic( &$magicWords, $langCode ) {
	# マジックワードを追加する
	# 最初の配列要素は大文字・小文字を区別するが、今回は大文字・小文字を区別しない
	# すべての残った要素はパーサ関数のためにシノニム(同義語)です
	$magicWords['example'] = array( 0, 'example' );
        # trueを返さない限り、他のパーサ関数拡張機能はロードされません。
        return true;
}
 
function wfExampleParserFunction_Render( &$parser, $param1 = '', $param2 = '' ) {
	# パーサ関数自身です
	# 入力パラメータは拡張されたテンプレートを伴うwikitextです
	# 出力もwikitextです
	return "param1 is $param1 and param2 is $param2";
}
 
?>

拡張機能によって有効になります。

* {{#example:hello | hi }}

出力です

  • param1 is hello and param2 is hi

タグ拡張機能と同様に、$parser->disableCache()はダイナミックな拡張機能のためのキャッシュを無効にするために使用されます。

パーサ関数を使用してwikitextの出力の代わりに解析されていないHTML出力をリターンするために、次のコードを使用します:

 return array($output, 'noparse' => true, 'isHTML' => true);

includes/Parser.phpでのコードにあるコメントからコピーされたsetFunctionHookのためのドキュメントです:

function setFunctionHook( $id, $callback, $flags = 0 )

パラメータ:

  • string $id - マジックワードのID
  • mixed $callback - 使用するコールバック関数(とオブジェクト)
  • integer $flags - オプションとして、"#"無しで関数を呼び出すSFH_NO_HASH定数を設定します。

返値: この名前のための古いコールバック関数


関数を作成します。例えば{{#sum:1|2|3}}です。コールバック関数は次のフォームを持つことになります:

function myParserFunction( &$parser, $arg1, $arg2, $arg3 ) { ... }

コールバックは要素0にあるテキストを伴う配列、他の要素でのフラッグの数、関数のテキストの結果を返します。 フラッグの名前はキーで指定されます。妥当なフラッグは以下の通りです:

found 
返されたテキストは妥当でテンプレートの処理を停止します。デフォルトではonです。
nowiki 
返値のwikiマークアップがエスケープされます
noparse 
安全ではないHTMLタグはストリップなどされません。
noargs 
返値にある三重波括弧の引数を置き換えしない
isHTML 
返されたテキストはHTML、wikitextの変形に対して保護します


パーサ関数拡張機能はパーサ関数のよく知られたコレクションです。

[edit] ネーミング

ハッシュ文字無しで名前を選択するとき(数字、記号、"#")、コロンの後に続く関数名で始まる名前を持つページのトランスクルージョンはもはや不可能であることに注意して下さい。とりわけ、関数名と名前空間の名前が同じにならないようにして下さい。この場合、interwikiトランスクルージョン [1] が有効になりますが、こちらも関数名とinterwikiの接頭辞が同じにならないようにして下さい。