Manual:Parser functions/de

Parser-Funktionen, die in MediaWiki 1.7 hinzugefügt wurden, sind eine Art Erweiterung, die eng mit dem Parser integriert sind. Der Ausdruck „Parser-Funktion“ sollte nicht mit $ext-parser verwechselt werden, die eine Sammlung von einfachen Parser-Funktionen ist. (Siehe $hlp-parser) The phrase "parser function" should not be confused with, which is a collection of simple parser functions. (See for those.)

Beschreibung
Während eine Tag Extension unverarbeiteten Text in HTML-Code verwandelt, kann eine Parser Function mit anderen Wiki-Elementen auf der Seite „interagieren“. Die Ausgabe einer Parser Function kann beispielsweise als Parameter für eine Vorlage oder für die Konstruktion eines Links genutzt werden.

Die typische Syntax für eine Parserfunktion lautet:

Für weitere Informationen, siehe für. Diese Dokumentation führt aus:


 * Die Callback-Funktion sollte diese Form haben:
 * Oder mit :
 * Oder mit :

The first variant of the call passes all arguments as plain text. The second passes all arguments as an array of s, with the exception of the first, which is currently text, though this may change in the future. These represent the unexpanded wikitext. The  parameter can be used to expand these arguments as needed. This is commonly used for conditional processing so that only the "true" case is evaluated with an if- or switch-like parser function. The frame object can also climb up the document tree to get information about the caller and has functions to determine and manage call depth, time-to-live, and whether the result of the parser function is volatile.

Die Erstellung 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 Aliase und Lokalisierung unterstützt.

Einfaches Beispiel
Hier ist ein Beispiel einer Erweiterung zur Erstellung einer Parser Function.

Die Registrierung geht in 'extension.json' und der Code in 'src/ExampleExtensionHooks.php' ein:

Eine weitere Datei, ExampleExtension.i18n.php, in Deinem Erweiterungsverzeichnis (nicht im Unterverzeichnis src/) sollte enthalten:

Wenn diese Erweiterung aktiviert ist,



bewirkt:


 * param1 is hello and param2 is hi and param3 is hey

Umfangreichere Funktionen
Für umfangreichere Funktionen, können Sie die Hook-Funktionen in eine _body.php oder Hooks.php-Datei aufteilen und mit statischen Funktionen einer Klasse arbeiten. Dann können Sie die Klasse mit laden und in den Hooks die statischen Funktionen aufrufen, z.B.:

Schreiben Sie dies in die Datei :
 * Siehe Schreiben eines Event-Handlers für weitere Stile.

Und dies in die Datei :

Caching/Zwischenspeicher
Wie bei Tag-Erweiterungen kann $parser->disableCache verwendet werden, um den Zwischenspeicher (Cache) für dynamische Erweiterungen zu deaktivieren. This has a significant negative impact on performance, so only use when necessary.

Steuerung des Parsens der Ausgabe
Um den Wikitext Ihrer Parser Function vollständig geparst zurückgeben zu lassen (einschließlich Erweiterung der Vorlagen), setzen Sie die -Option bei der Rückgabe auf false:

Wie es scheint, wurde der Standardwert für  irgendwann um Version 1.12 von false auf true geändert.

Umgekehrt, damit Ihre Parser Function anstelle von Wikitext HTML zurückgibt, das ungeparst bleibt, benutzen Sie dies:

This is a test. produziert allerdings so etwas wie das:

This is

param1 is hello and param2 is hi and param3 is hey a test.

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

Benennung
Standardmäßig fügt MW ein Raute-Zeichen („#“) zum Namen der jeweiligen Parserfunktion hinzu. Dies kann unterdrückt (und eine Parserfunktion ohne „#“-Präfix erhalten) werden, wenn die SFH_NO_HASH-Konstante für das optionale Flags-Argument von setFunctionHook verwendet wird, wie unten beschrieben. To suppress that addition (and obtain a parser function with no "#" prefix), include the SFH_NO_HASH constant in the optional flags argument to setFunctionHook, as described below.

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

Der setFunctionHook Hook
Weitere Einzelheiten zur Parser-Schnittstelle finden Sie in der Dokumentation zu setFunctionHook in includes/Parser.php. Hier ist eine (möglicherweise veraltete) Kopie der dortigen Dokumentation:

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


 * string $id - Die ID des magischen Worts
 * mixed $callback - Die Callback-Funktion (oder das Objekt), die/das verwendet werden sollte
 * integer $flags - Optional, auf die SFH_NO_HASH-Konstante setzen, um die Funktion ohne „#“ aufrufen zu können.

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

Erstelle eine Funktion, z.B. . Die Callback-Funktion sollte diese Form haben:

Die Callback-Funktion 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 werden in den Schlüsseln angegeben. 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 im Rückgabewert sollte maskiert werden
 * noparse : Unsichere HTML-Tags sollten nicht entfernt werden, usw.
 * noargs : Argumente in Dreifach-Klammer sollen im Rückgabewert nicht ersetzt werden
 * isHTML : Der zurückgegebene Text ist HTML, schütze es gegen Wikitext-Transformationen

Benannte Parameter
Parser Function unterstützen benannte Parameter nicht auf die gleiche Weise wie Vorlagen und Tag Extensions, aber es kann manchmal nützlich sein, dieses Verhalten zu simulieren. Benutzer sind oft daran gewöhnt, senkrechte Striche (|) zu verwenden, um Parameter zu trennen, sodass es auch im Kontext von Parser Function sinnvoll sein kann, dies zu ermöglichen. Hier ist ein einfaches Beispiel, wie das erreicht werden kann:

Siehe auch

 * Die ParserFunctions-Erweiterung ist eine bekannte Sammlung von Parserfunktionen.
 * , an (incomplete) list of parser functions provided by core and extensions.
 * Die ParserFunctions-Erweiterung ist eine bekannte Sammlung von Parserfunktionen.
 * , an (incomplete) list of parser functions provided by core and extensions.
 * Die ParserFunctions-Erweiterung ist eine bekannte Sammlung von Parserfunktionen.
 * , an (incomplete) list of parser functions provided by core and extensions.
 * Die ParserFunctions-Erweiterung ist eine bekannte Sammlung von Parserfunktionen.
 * , an (incomplete) list of parser functions provided by core and extensions.
 * , an (incomplete) list of parser functions provided by core and extensions.
 * The Parser Hooks PHP library, which provides an object orientated interface for declarative parser hooks