Manual:Parser functions/de

From MediaWiki.org
Jump to: navigation, search
Gnome-preferences-other.svg Erweiterungen: Tag-Erweiterungen Parserfunktionen Hooks Spezialseiten Skins Zauberworte API
MediaWiki Erweiterungen

Parserfunktionen, die in MediaWiki 1.7 hinzugefügt wurden, sind eine Art Erweiterung, die eng mit dem Parser integrieren. Der Begriff Parserfunktionen, sollte nicht mit Erweiterung:Parserfunktionen verwechselt werden, das ist eine Sammlung von einfachen Parserfunktionen.

Beschreibung[edit | edit source]

Tag-Erweiterungen sind integriert, um unverarbeiteten Text mitzunehmen und ihn als HTML zurück zu geben; sie haben sehr wenig Integration mit dem Rest des Parsers. Zum Beispiel kann die Ausgabe einer Tag-Erweiterung nicht als Vorlagenparameter verwendet werden. Ferner ist es möglich Vorlagen innerhalb einer Tag-Erweiterung auszubauen, aber es muss manuell erfolgen — ein fehleranfälliger Prozess, der sich von Version zu Version ändert.

Die typische Syntax für eine Parserfunktion lautet:

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

Erstellen einer Parserfunktion ist etwas komplizierter als die Schaffung eines neuen Tag, weil der Name der Funktion ein magisches Wort sein muss — ein Schlüsselwort, das Aliases und Lokalisierung unterstützt.

Einfaches Beispiel[edit | edit source]

Unten ist ein Beispiel von einer Erweiterung, die eine Parserfunktion erstellt.

Diese Datei sollte ExampleExtension.php genannt werden, wenn der Name Ihrer Erweiterung ExampleExtension ist :

<?php
 
// Take credit for your work.
$wgExtensionCredits['parserhook'][] = array(
 
   // The full path and filename of the file. This allows MediaWiki
   // to display the Subversion revision number on Special:Version.
   'path' => __FILE__,
 
   // The name of the extension, which will appear on Special:Version.
   'name' => 'Example Parser Function',
 
   // A description of the extension, which will appear on Special:Version.
   'description' => 'A simple example parser function extension',
 
   // Alternatively, you can specify a message key for the description.
   'descriptionmsg' => 'exampleextension-desc',
 
   // The version of the extension, which will appear on Special:Version.
   // This can be a number or a string.
   'version' => 1, 
 
   // Your name, which will appear on Special:Version.
   'author' => 'Me',
 
   // The URL to a wiki page/web page with information about the extension,
   // which will appear on Special:Version.
   'url' => 'https://www.mediawiki.org/wiki/Manual:Parser_functions',
 
);
 
// Specify the function that will initialize the parser function.
$wgHooks['ParserFirstCallInit'][] = 'ExampleExtensionSetupParserFunction';
 
// Allow translation of the parser function name
$wgExtensionMessagesFiles['ExampleExtensionMagic'] = dirname( __FILE__ ) . '/ExampleExtension.i18n.magic.php';
 
// Tell MediaWiki that the parser function exists.
function ExampleExtensionSetupParserFunction( &$parser ) {
 
   // Create a function hook associating the "example" magic word with the
   // ExampleExtensionRenderParserFunction() function.
   $parser->setFunctionHook( 'example', 'ExampleExtensionRenderParserFunction' );
 
   // Return true so that MediaWiki continues to load extensions.
   return true;
}
 
// Render the output of the parser function.
function ExampleExtensionRenderParserFunction( $parser, $param1 = '', $param2 = '' ) {
 
   // The input parameters are wikitext with templates expanded.
   // The output should be wikitext too.
   $output = "param1 is $param1 and param2 is $param2";
 
   return $output;
}

Eine weitere Datei, ExtensionName.i18n.magic.php, sollte enthalten:

/**
 * Internationalization file for magic words.
 */
 
$magicWords = array();
 
$magicWords['en'] = array(
   'example' => array( 0, 'example' ),
);

Mit dieser Erweiterung aktiviert,

  • {{#example: hallo | hi}}

produziert:

  • param1 ist hallo und param2 ist hi

Mehr Funktionen[edit | edit source]

Für mehr Funktionen, können Sie die Hook-Funktionen in eine _body.php oder Hooks.php Datei aufteilen und statische Funktionen von einer Klasse machen.

Dann können Sie die Klasse mit $wgAutoloadClasses laden und rufen die statischen Funktionen in den Hooks, z.B.:

Setzen Sie diese in Ihre MyExtension.php Datei:

$wgAutoloadClasses['MyExtensionHooks'] = "$dir/MyExtension.hooks.php";
$wgHooks[' ... '][] = 'MyExtensionHooks::MyExtensionFunction';

Dann setzen Sie diese in Ihre MyExtension.hooks.php Datei:

class MyExtensionHooks {
      public static function MyExtensionFunction( ... ) { ... }
}

Zwischenspeicherung[edit | edit source]

Wie bei Tag-Erweiterungen, $parser->disableCache() kann verwendet werden, um den Zwischenspeicher (Cache) für dynamische Erweiterungen zu deaktivieren.

Parserschnittstelle[edit | edit source]

Steuerung des geparsten der Ausgabe[edit | edit source]

Um den Wikitext von Ihrer Parserfunktion zurückgegeben zu lassen, vollständig analysiert werden (einschließlich Erweiterung der Vorlagen), setzen Sie die noparse Option auf false bei der Rückkehr

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

Es scheint, der Standardwert für noparse ändert von false auf true, zumindest in einigen Situationen, irgendwann um Version 1.12.

Umgekehrt, damit Ihre Parserfunktion HTML zurückgibt das ungeparsed bleibt, anstatt sie direkt Wikitext zurück gibt, benutzen Sie dies:

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

Allerdings,

Dies ist {{#example:hallo | hi }} ein Test.

produziert so etwas wie das:

Dies ist

param1 ist hallo und param2 ist hi ein Test.


Dies geschieht aufgrund einer fest programmierten "\n\n", die auf der HTML-Ausgabe von Parserfunktionen vorangestellt wird. Um dies zu vermeiden, stellen Sie sicher, dass und der HTML-Code gerendert wird inline mit dem umgebenden Text, können Sie dies nutzen:

return $parser->insertStripItem( $output, $parser->mStripState );

Benennung[edit | edit source]

Standardmäßig fügt MW einen Hash-Zeichen (Anzahlzeichen "#") auf den Namen der jeweiligen Parserfunktion.

Um diese Hinzufügung zu unterdrücken (und eine Parserfunktion ohne "#"-Präfix zu erhalten), gehören die SFH_NO_HASH Konstante in den optionalen Flags-Argument setFunctionHook, wie unten beschrieben.

Bei der Wahl eines Namens ohne einen Hash-Präfix, beachten Sie dass Vorlageneinbindung einer Seite mit einem Namen, der mit diesem Namen der Funktion gefolgt von einem Doppelpunkt nicht mehr möglich ist. Vermeiden Sie insbesondere Funktionsnamen gleich einem Namensraum-Namen. Für den Fall, dass Interwiki Vorlageneinbindung [1] aktiviert ist, vermeiden Sie auch, Funktionsnamen gleich einer Interwiki-Präfix.

Der setFunctionHook Hook[edit | edit source]

Für weitere Einzelheiten der Schnittstelle in den Parser, sehen Sie in der Dokumentation für setFunctionHook in includes/Parser.php nach.

Hier ist eine (möglicherweise datierte) Kopie dieser Stellungnahmen:

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

Parameter:

  • string $id - Die magische Wort ID
  • mixed $callback - Die Callback-Funktion (und Objekt) das verwendet werden sollte
  • integer $flags - Optional, set it to the SFH_NO_HASH constant to call the function without "#".

Rückgabewert: Die alte Callback-Funktion für diesen Namen, wenn überhaupt


Erstelle eine Funktion, z.B., {{#sum:1|2|3}}. Die Callback-Funktion sollte die Form haben:

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

Der Rückruf kann entweder das Textergebnis der Funktion zurückgeben, oder ein Array mit dem Text in Element 0, und eine Anzahl von Flags in den anderen Elementen. Die Namen der Flags angegeben in den Schlüsseln. Gültige Flags sind

found 
Der zurückgegebene Text ist gültig, ausführen der Vorlage anhalten. Dies ist standardmäßig aktiviert.
nowiki 
Wiki-Markup in dem Rückgabewert sollte maskiert werden
noparse 
Unsichere HTML-Tags sollten nicht abgestreift werden, usw.
noargs 
Ersetzen Sie nicht Dreifach-Klammer Argumente im Rückgabewert
isHTML 
Der zurückgegebene Text ist HTML, rüste es gegen Wikitext Transformation

Siehe auch[edit | edit source]

Sprache: English  • dansk • Deutsch • Bahasa Indonesia • 日本語 • русский