Manual:Parser functions/da

Parserfunktioner, som tilføjedes i MediaWiki version 1.7, er en type udvidelse, der er tæt knyttet til syntaks-analysen, også kaldet parseren. Udtrykket "parserfunktion" må ikke forveksles med, som er en samling af simple parserfunktioner. (See for those.)

Beskrivelse
Whereas a tag extension is expected to take unprocessed text and return HTML to the browser, a parser function can 'interact' with other wiki elements in the page. For example, the output of a parser function could be used as a template parameter or in the construction of a link.

Den typiske syntaks for en parserfunktion er:

For more information, see for. This documentation states:


 * The callback function should have the form:
 * Or with :
 * Or with :

The first variant of the call passes all arguments as plain text. The second passes all arguments as an array of s, except for 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.

Oprettelse af en parserfunktion er lidt mere kompliceret end at skabe et nyt mærke, fordi funktionens navn skal være et magisk ord/da - et nøgleord, der understøtter aliaser og sprogversioner.



Simpelt eksempel
Nedenfor er et eksempel på en udvidelse, der skaber en parserfunktion.

The registration goes into extension.json and the code into src/ExampleExtensionHooks.php respectively:

En anden fil, ExtensionName.i18n.php, bør indeholde:

Med denne udvidelse aktiveret



producerer


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

Within LocalSettings.php
Magic words and their handling parser functions can be defined entirely in.



Længere funktioner
For længere funktioner vil du måske adskille krog-funktionerne til en _body.php eller .hooks.php fil og lave dem til en klasses statiske funktioner. Så kan du hente klassen med og kalde de statiske funktioner på krogene:

Sæt dette ind i din  fil:
 * See: writing an event handler for other styles.

Så sæt dette i din  fil:

Mellemlagring
Ligesom med mærke-udvidelser kan bruges til at afbryde mellemlagringen (cache'en) for dynamiske udvidelser.

This has a significant negative impact on performance, so only use when necessary.



Parser brugergrænseflade


Styring af systemanalyse-resultat
For at få wikiteksten, der returneres af din parserfunktion, til være fuldt systemanalyseret (med udvidelse af skabeloner), skal du indstille  til false ved returneringen:

Det ser ud til at standardværdien for  er ændret fra false til true, i hvert fald i nogle situationer, omkring version 1.12.

Omvendt, for at få din parserfunktion til at returnere ikke-gennemgået HTML i stedet for wikitekst, brug dette:

Imidlertid vil Dette er en test. producere noget lignende dette:


 * This is


 * param1 is hallo and param2 is hej en test.

Dette sker på grund af den hårde kode "\n\n", der er foranstillet til parserfunktioners HTML resultat. For at undgå dette og sørge for, at HTML-koden er vises mellem til den omgivende tekst, kan du bruge denne:

Navngivning
Som standard tilføjer MW en hash karakter (nummertegn, "#") til navnet af hver parserfunktion. For at undertrykke denne tilføjelse (og opnå en parser funktion uden "#" præfiks), indsæt SFH_NO_HASH konstant i den valgfri flag-argument til setFunctionHook, som beskrevet nedenfor. 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.

Når du vælger et navn uden et hash præfiks, vær opmærksom på at indlejring af en side med et navn, der starter med dette funktionsnavn efterfulgt af et kolon, er ikke længere muligt. Undgå især funktionsnavne svarende til et navnerums-navn. I tilfælde af at interwiki indlejring er aktiveret, undgå da også funktionsnavne svarende til et interwiki præfiks.



setFunctionHook krogen
For flere oplysninger om grænsefladen ind i parseren, se dokumentationen for setFunctionHook i includes/Parser.php. Her er en (muligvis dateret) kopi af disse bemærkninger:

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


 * string $id - det magiske ord ID
 * mixed $callback - tilbagekalds-funktionen (og objektet) at bruge
 * integer $flags - valgfri, sættes til SFH_NO_HASH konstanten, for at kalde funktionen uden "#".

Returværdi: navnets gamle tilbagekalds-funktion, hvis der er nogen

Opret en funktion, for eks. . Tilbagekalds-funktionen bør have formen:

Tilbagekaldet kan enten returnere tekstresultatet af funktionen, eller en tabel med teksten i element 0, og et antal flag i de andre elementer. Navnene på flagene er specificeret i nøglerne. Gyldige flag er:


 * forceRawInterwiki
 * Force interwiki transclusion to be done in raw mode, not rendered.


 * found
 * Den returnerede tekst er gyldig, stop behandlingen af skabelonen. Dette er som standard aktiveret.


 * isChildObj
 * The text is a DOM node needing expansion in a child frame.


 * isHTML
 * Den returnerede tekst er HTML og skal værnes mod wikitekst forandring


 * isLocalObj
 * The text is a DOM node needing expansion in the current frame.


 * noparse
 * Usikre HTML-mærker bør ikke gennemgås osv.


 * nowiki
 * Wiki-opmærkning i resultatet skal udelades


 * preprocessFlags
 * Use these flags when parsing the returned text. This only applies when noparse is.


 * text
 * The text returned from the function. If isChildObj or isLocalObj are specified, this should be a DOM node instead.


 * title
 * The Title object where the text came from.



Navngivne parametre
Parserfunktioner understøtter ikke navngivne parametre på samme måde som skabeloner og mærke-udvidelser, men det er til tider nyttigt at lade som om. Brugerne er ofte vant til at bruge lodrette streger ( | ) til at adskille argumenter, så det er rart også at kunne gøre det i parserfunktionens kontekst. Her er et simpelt eksempel på hvordan det gøres.



Se også

 * ParserFunctions-udvidelsen er en velkendt samling af parserfunktioner.
 * - an (incomplete) list of parser functions provided by core and extensions
 * ParserFunctions-udvidelsen er en velkendt samling af parserfunktioner.
 * - an (incomplete) list of parser functions provided by core and extensions
 * ParserFunctions-udvidelsen er en velkendt samling af parserfunktioner.
 * - an (incomplete) list of parser functions provided by core and extensions
 * ParserFunctions-udvidelsen er en velkendt samling af parserfunktioner.
 * - 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