Manual:Special pages/nl

Speciale pagina's zijn pagina's die door de software worden aangemaakt als er om het uitvoeren van een specifieke functie wordt gevraagd.

Een speciale pagina kan bijvoorbeeld alle pagina's weergeven met een of meer koppelingen naar een externe site of een formulier maken met door de gebruiker ingediende feedback.

Speciale pagina's bevinden zich in hun eigen namespace (Special:) en kunnen niet direct worden bewerkt zoals andere pagina's. kan ook nieuwe speciale pagina's maken.

Deze pagina's zijn standaard toegankelijk voor de gebruiker en worden over het algemeen weergegeven in de lijst met alle speciale pagina's op Special:SpecialPages. Sommige speciale pagina's zijn alleen toegankelijk voor gebruikers met bepaalde machtigingen en toegangen. Andere speciale pagina's verschijnen helemaal niet op de speciale paginalijst en worden alleen intern door de wiki gebruikt.



Algemene informatie
Alle ingebouwde speciale pagina's die bij MediaWiki worden geleverd, worden  genoemd en bevinden zich in de map. Speciale kernpagina's moeten worden geregistreerd in de kernlijst in  om door MediaWiki te worden geladen. Speciale pagina's die door externe ontwikkelaars zijn gemaakt, worden over het algemeen opgeslagen in de map  in hun eigen bestand of als onderdeel van een grotere extensie. Alle speciale pagina's erven van een class genaamd die is gedefinieerd in. Wanneer een nieuwe speciale pagina wordt gemaakt, kunnen de gebruikersrechten worden gedefinieerd die nodig zijn om toegang te krijgen tot de pagina. Deze rechten geven onder andere aan of de pagina op Special:SpecialPages wordt weergegeven en of de pagina op andere pagina's kan worden opgenomen.

Speciale pagina's hebben ook unieke namen die op een wiki kunnen worden aangepast. De algemene vorm is "Special:Pagename" waarbij zowel "Special" als "Pagename" aanpasbaar zijn. De Speciale pseudo kan in andere talen worden vertaald. Deze vertaalde namespace kan worden geproduceerd met de wikitekst    , op deze wiki met "    ". De naam van de speciale pagina kan ook opnieuw worden gedefinieerd in een systeembericht, voor de taal van de site, met de generieke naam van de speciale pagina als de ID.

Een speciale pagina kan al dan niet invoer toestaan. Met Special:Export kan een gebruiker bijvoorbeeld een specifieke pagina definiëren om te exporteren door Special:Export/Sun aan te roepen. Als de speciale pagina complexe invoer toestaat, worden aanvullende parameters verzonden naar de component query string van de URL voor verwerking, bijvoorbeeld https://www.mediawiki.org/w/index.php?title=Special:Recentchanges&days=3&limit=250.



Basissjabloon speciale pagina
Voor de meeste extensies voor een speciale pagina zijn er drie bestanden vereist:


 * een klein installatiebestand, dat elke keer wordt geladen wanneer MediaWiki wordt gestart.
 * bestand met de meeste code.
 * Lokalisatie bestand

MediaWiki codering conventies definiëren de drie bestanden zo:


 * - Het bestand voor het instellen.
 * - De speciale pagina code.
 * - De.

Zet alle bestanden in een nieuwe map in uw MediaWiki map

Noem de naam van het speciale pagina bestand na de extensie. Bijvoorbeeld, bevat het bestand. Als uw extensie meer dan één speciale pagina gebruikt, heeft u meer namen nodig.

In onderstaand voorbeeld is de naam van de speciale pagina MyExtension.

Na het maken van de onderstaande bestanden, voeg de volgende regel toe aan LocalSettings.php, het schakelt de extensie in:



Het bestand voor de configuratie
Voorbeeld van een installatiebestand voor :

Dit bestand registreert een aantal belangrijke en verplichte zaken:


 * de plaats van de class MediaWiki\Extension\MyExtension\Special
 * de plaats van de lokalisatie bestanden
 * de nieuwe speciale pagina en de bijbehorende class naam.



Het speciale pagina bestand
Het bestand moet een subclass van   of een van de subclasses ervan bevatten. Dit bestand wordt automatisch geladen wanneer iemand de speciale pagina kiest. In het onderstaande voorbeeld wordt de subclass SpecialMyExtension geïmplementeerd.

U hebt de constructor  nodig omdat de eerste parameter uw speciale pagina een naam geeft.

is de belangrijkste functie die wordt aangeroepen wanneer een speciale pagina wordt geopend. Deze functie overschrijft,voor deze class, de functie. Het geeft de enkele parameter, de subpaginacomponent van de huidige titel. Als iemand bijvoorbeeld een link naar Special:MyExtension/blah volgt, bevat  "blah".

U moet Wikitekst en HTML-uitvoer uitvoeren via. Gebruik 'print' of 'echo' niet direct wanneer u binnen de gebruikersinterface van de wiki werkt.

Als u uw speciale pagina echter gebruikt als toegangspunt voor aangepaste XML- of binaire uitvoer, raadpleegt u.



Het lokalisatiebestand

 * Lees voor hoe het vertaald te krijgen: .

Alle speciale pagina's geven een titel op, zoals.


 * De titel wordt gebruikt in de en  elementen van de pagina van de extensie en op Special:SpecialPages.
 * Het kan van alles zijn, maar moet de speciale pagina en extensie beschrijven.
 * Het wordt opgegeven via een bericht. De structuur van het bericht is een sleutel-waardepaar. De sleutel,, moet uit allemaal kleine letters bestaan.

Een voorbeeld van een lokalisatiebestand in $i 18n:

In, de bericht documentatie:

Houd er rekening mee dat id's niet met een hoofdletter mogen beginnen en dat een spatie in de id als onderstrepingsteken in de code moet worden geschreven.

Het bericht samenvatting is optioneel. Het wordt automatisch gemaakt door de bovenliggende class en bovenaan de speciale pagina weergegeven, meestal voor een beknopte beschrijving van wat de gebruiker ermee kan doen. Als u de inhoud niet definieert, wordt deze alleen gebruikt wanneer wikibeheerders deze op de wiki aanpassen.



Het aliassen bestand
U kunt de naam van de speciale pagina ook internationaliseren door er aliassen voor te maken. In het onderstaande voorbeeld wordt het bestand "MyExtension.i18n.alias.php" gebruikt. In dit voorbeeld registreert de speciale pagina  een alias zodat de pagina toegankelijk wordt op   en   in het Duits.

Voeg uw aliasbestand toe aan :

Voeg speciale pagina-aliassen toe aan :

Nogmaals, u moet een spatie in de ID en een onderstrepingsteken in de code schrijven.

Voor de paginakoptekst en koppeling gelden de gebruikelijke regels voor paginanamen.

Als  waar is, wordt een kleine letter omgezet in hoofdletters en wordt een onderstrepingsteken weergegeven als spatie.

In plaats van het bovenstaande kunnen we bijvoorbeeld  gebruiken, ervan uitgaande dat we de extensie consequent elders als   hebben geïdentificeerd.

Merk op dat in de associatieve array voor de Engelse taal, de tekenreeks die onze SpecialPage identificeert ( in het voorbeeld) ook een geldige titel is.

Merk ook op dat het eerste element van hetzelfde moet zijn als de  ! Anders wordt de pagina niet weergegeven door Special:Specialpages.



Speciale pagina groep
U kunt instellen onder welke groep uw speciale pagina op Special:SpecialPages wordt weergegeven door  in uw subclass te overschrijven.

te gebruiken, wat zich vertaalt naar iets als 'Mediarapporten en uploads' in het Nederlands; *     * @return string */   function getGroupName { return 'media'; }

Enkele veel voorkomende waarden zijn 'login', 'maintenance', 'media', 'other', 'pagetools', 'redirects', 'users'. U kunt de geaccepteerde waarden op Special:AllMessages zien (zoek op specialpages-group) of door de wiki bladeren met behulp van de pseudotaal 'qqx' door naar Special:SpecialPages?uselang=qqx ) te gaan en naar de koppen te kijken. Geef het woord 'media' op om het interfacebericht 'specialpages-group-media' te gebruiken.

Als uw speciale pagina niet in een van de vooraf geconfigureerde koppen past, kunt u een nieuwe kop toevoegen door deze toe te voegen aan uw lokalisatiebestand, zie het lokalisatiebestand).

De standaardpaginagroepen die bij MediaWiki worden geleverd, worden weergegeven in het lokalisatiebestand. De Engelse berichten staan bijvoorbeeld in  en beginnen met. Als u uw speciale pagina onder  wilt categoriseren, wordt het bericht. De waarde voor deze sleutel is de tekst die wordt weergegeven als de naam van die categorie, bijvoorbeeld.

Als uw speciale pagina niet onder een van de bestaande categorieën lijkt te passen, kunt u altijd een nieuwe maken. In het lokalisatiebestand van uw extensie voegt u eenvoudig een nieuwe sleutel in het array  in. In dit voorbeeld definiëren we de groep :

Ervan uitgaande dat u de returnwaarde voor de methode  instelt als   in uw definitie van de classes, laadt u Special:SpecialPages opnieuw om uw nieuwe categorie te zien.



Constructor
U kunt de constructeur overload doen om uw eigen gegevens te initialiseren, maar de belangrijkste reden waarom u dat wilt doen is om het gedrag van de class SpecialPage zelf te veranderen. Wanneer u de basis-class constructor uit uw child-class aanroept, zijn de volgende parameters beschikbaar:


 * string  Naam van de speciale pagina, zoals in links en URL's te zien
 * string  User right is vereist, bijvoorbeeld "block" of " delete"; zie ook paginatoegang beperken
 * boolean  Of de pagina is opgenomen in de lijst Special:Specialpages

Hiermee wordt het object OutputPage  geïnitieerd met de naam en beschrijving van uw speciale pagina. Het moet altijd worden aangeroepen vanuit uw execute methode.

Deze methode geeft een object OutputPage terug dat, zoals hieronder beschreven, kan worden benaderd. Gebruik, zoals in de voorbeeldcode,

in plaats van de ontraden globale variabele

Deze methode geeft een object WebRequest terug dat, zoals hieronder beschreven, kan worden benaderd. Gebruik, zoals in de voorbeeldcode,

in plaats van de ontraden globale variabele

Sommige speciale pagina's kunnen worden toegevoegd (included) vanuit een andere pagina. Als u bijvoorbeeld toevoegt aan de wiki-tekst van een pagina, wordt er een lijst van recente wijzigingen ingevoegd binnen de bestaande inhoud van de pagina.

Het opnemen van een speciale pagina van een andere webpagina is alleen mogelijk als u de pagina als inclusief in de constructor hebt verklaard. Dit kan u doen door het volgende toe te voegen in de methode  na de initialisatie van de parent-class:

U kunt uw speciale pagina-class ook definiëren als een uitbreiding van de class IncludableSpecialPage.

De functie SpecialPage->including geeft een boolean-waarde terug die u de context aangeeft waarin de speciale pagina wordt opgeroepen: false als het een aparte webpagina is en true als het wordt gedaan vanuit een andere webpagina. Meestal wilt u de presentatie wat kleiner maken als de pagina wordt opgenomen.

Dit is de functie die uw child class met overload gebruikt moet worden. Het geeft een enkele parameter door, meestal cryptisch aangeduid als  (kort voor $parameter, omdat het de parameter is die de gebruikers kunnen doorgeven aan uw speciale pagina). Deze parameter is de subpaginacomponent van de huidige titel. Als iemand bijvoorbeeld een link naar Special:MyExtension/blah volgt, bevat  "blah".



Helppagina
Het is handig om helppagina's op MediaWiki.org toe te voegen, waar ze vertaalbaar zullen zijn. Om ervoor te zorgen dat gebruikers uw hulppagina vinden, is het raadzaam en heel eenvoudig voor uw speciale pagina om de betreffende hulppagina te koppelen:

OutputPage.php
OutputPage.php bevat de definitie van classes voor objecten van het type. U kunt een object van deze class van uw SpecialPage krijgen met behulp van

De naam van de variabele $output is natuurlijk willekeurig. Hoe u het ook noemt, dit is de variabele die u het meest gebruikt, omdat het de manier is om uitvoer naar de browser te sturen (Gebruik dus niet  of  ). Als u het ergens wilt gebruiken, maak uw variabele dan globaal:

Als u wilt, kunt u meerdere OutputPage-objecten op verschillende manieren maken in uw extensie SpecialPage. Ze zullen de uitvoer toevoegen in de volgorde waarin ze worden uitgevoerd.

U kunt de class OutputPage inspecteren door  te bekijken (eigenlijk, deze kunnen allemaal worden gecontroleerd), maar er zijn een paar methoden die u zeker moet kennen.

In wezen de snelle en vuile vervanging van. Het neemt de uitvoer en voegt het toe aan de buffer. In de onderstaande actie, als  gebruikersgegevens bevat, kan het gemakkelijk XSS, kwaadaardige dingen of de rommel van Satan bevatten. U kunt beter gebruik maken van escape (zoals met de php functie htmlentities) of de XML-builders class om betrouwbare output te maken.

Voor de meeste uitvoer, moet u deze functie gebruiken. Het is een soort zwarte doos: Wikitext in, HTML uit, en er gebeurt een hele hoop geheime code tussenin.

Het is opmerkelijk dat de parser uw stukken ziet als samenhangende geheel en paragraaf. Dat is...

Het zal drie lijsten met elk een item uitvoeren, wat waarschijnlijk niet zo bedoeld was.

Let echter op, als u gewoon een systeembericht wilt toevoegen en het als geparseerde wikitext wilt behandelen, kunt u code gebruiken zoals. Dit zal niet het probleem hebben met de hierboven genoemde gebouwde parser aanroepen.



Tijdelijke oplossing #1
Belangrijk: deze tijdelijke oplossingen zijn alleen nodig als u een transcludable speciale pagina maakt. Normale speciale pagina's hebben deze niet nodig.

Als tijdelijke oplossing kunt u uw extensies Wikitext naar HTML laten omzetten met behulp van een apart Parser-object en vervolgens. gebruiken Voorbeeld:



Tijdelijke oplossing #2
Ik heb het bovenstaande geprobeerd en heb ontdekt dat hetzelfde probleem nu van toepassing is op alle tags in de transcluded tekst. Dit zal geen probleem zijn voor veel extensies, maar de extensie die ik schreef was bedoeld om wikitext van een andere pagina te laten zien als onderdeel van de functionaliteit, dus was het hier een probleem.

Het proces voor het analyseren van een pagina die een speciale pagina omvat lijkt dit te zijn:


 * 1) Vervang  met een UNIQ-QINU marker (omdat verwacht wordt dat de uitvoer van SpecialPage goede HTML  is voor uitvoer)
 * 2) Vervang alle tags met QINU markers zoals hierboven
 * 3) Al het andere van wiki-tekst naar HTML parsen
 * 4) Vervang alle QINU markers met hun respectieve opgeslagen waarden, in één verwerking

Het proces voor het analyseren van een pagina die geen speciale pagina omvat lijkt dit te zijn:


 * 1) Vervang  of  met de inhoud van de omvatte pagina (omdat die getransclude pagina's niet verwerkte wikitext bevatten)
 * 2) Vervang alle tags met QINU markers zoals hierboven
 * 3) Al het andere van wiki-tekst naar HTML parsen
 * 4) Vervang alle QINU markers met hun respectieve opgeslagen waarden, in één verwerking

Het probleem is blijkbaar dat in het eerdere geval het parsen van de wiki-tekst van de SpecialPage de laatste QINU-decodingsstap ontbreekt (waarom?), dus alle QINU markers zijn ongecodeerd gelaten. (Dit kan een overblijfsel zijn van het gebruik van dezelfde syntaxis om transclusie van een wikitekstpagina op te roepen, die gewoon rechtstreeks in de wikitekstinhoud van de hostpagina wordt geplakt en geparseerd, zoals wordt gebruikt om transclusie van een SpecialPage aan te roepen, die helemaal niet mag worden geparseerd. Waar de code ook is die beslist "wacht, dit is een speciale pagina -- vervang deze door een QINU", het zou de extra unstripGeneral moeten doen voordat de QINU-substitutie wordt uitgevoerd.)

Dus ik deed het volgende -- na deze regel: ...Ik heb deze regels toegevoegd (de tweede is alleen omdat de functiedefinitie van de eerste het aanbeveelt): Omdat ik dit nu heb gedocumenteerd, zal ik er natuurlijk een fout in vinden en me echt dom voelen... Maar zolang het werkt, moest ik het hier documenteren. (Het is ook belangrijk om het probleem met de tussenoplossing #1 op te merken.) Ik heb dit ook alleen getest met MediaWiki 1.10.1. Het probleem bestaat nog steeds onder MW 1.14, deze oplossing kan daar wel of niet werken. --Woozle 18:26, 9 April 2009 (UTC)

Er wordt een foutpagina weergegeven. De argumenten $codetile en  geven keys in $this->msg, geen tekst. Een voorbeeldː


 * 'error' verwijst naar de tekst "".
 * 'badarticleerror' verwijst naar de tekst "".

U kunt ook berichtobjecten specificeren of parameters toevoegen:

WebRequest.php
De class wordt gebruikt om informatie te verkrijgen uit de GET- en POST-arrays. Het wordt aanbevolen dit te gebruiken boven direct toegang tot de superglobalen. Het object WebRequest is toegankelijk voor extensies met behulp van de.

Database.php
MediaWiki has a load of convenience functions and wrappers for interacting with the database, using the class. It also has an interesting load balancing scheme in place. It's recommended you use these wrappers. Check out  for a complete listing of all the convenience functions, because these docs will only tell you about the non-obvious caveats. See.

User.php
The class is used to represent users on the system. SpecialPage->getUser should be used to obtain a User object for the currently logged in user. The use of the global  is deprecated

Title.php
Title represents the name of a page in the wiki. This is useful because MediaWiki does all sorts of fun escaping and special case logic to page names, so instead of rolling your own convert title to URL function, you create a Title object with your page name, and then use  to get a URL to that page.

To get a title object for your special page from outside of the special page class, you can use. It will give you a localised title in the wiki's language.

Custom special pages
There are various ways to provide your own special pages not bundled within MediaWiki:


 * One method is to install an extension that generates a form to create or edit an article. A list of extensions currently available, can be found at.
 * You can also write an extension which provides your own special page. Writing your own extension requires PHP coding skill and comfort with object oriented design and databases also is helpful.  You will also need to know how to use code to create and edit MediaWiki articles. For more information, please see this discussion.
 * You can also display a custom page through JavaScript, in place of the default error message "Unknown special page" (or the "This page is intentionally left blank." message, if using a subpage of Special:BlankPage). In MediaWiki:Common.js, check for, then hide the MediaWiki-generated content (just appendCSS  ), and inject custom HTML  into the   or  . For an example, see meta:User:Krinkle/Tools/Real-Time Recent Changes.

Setting an Extension Title
MediaWiki does not set the title of the extension, which is the developer's job. It will look for the name of the extension when Special:Specialpages is called or the special page is loaded. In the function execute( $par ) section, use OutputPage methods to title the extension like:

The place where the extension can be found (as specified by what is passed into the SpecialPage constructor) is the key--except that it is not capitalized because of, the internally used function that finds out the title (or, what they call description) of the special page,   the name. "ThisIsACoolSpecialPage"'s key would be "thisisacoolspecialpage."

Theoretically,  can be overloaded in order to avoid interacting with the message cache but, as the source code states: "Derived classes can override this, but usually it is easier to keep the default behavior.  Furthermore, this prevents the MediaWiki namespace from overloading the message, as below.

Localizing the Extension Name
So you've just installed a shiny new MediaWiki extension and realize: "Oh no, my wiki is in French, but the page is showing up as English!" Most people wouldn't care, but it's actually a quite simple task to fix (as long as the developer used the method explained on this page). No noodling around in source code. Let's say the name of the page is  and the name comes out to "List of Dirty Pages" but you want it to be (and excuse my poor French) "Liste de Pages Sales". Well, it's as simple as this:


 * 1) Navigate to MediaWiki:DirtyPages, this page may not exist, but edit it anyway
 * 2) Insert "Liste de Pages Sales" and save

And voilà (pardon the pun), the change is applied.

This is also useful for customizing the title for your wiki within your language: for instance, the developer called it "List of Dirty Pages" but you don't like that name, so you rename it "List of Pages needing Cleanup". Check out Special:Allmessages to learn more.

Also, if your extension has a large block of text that does change, like a warning, don't directly output the text. Instead, add it to the message cache and when the time comes to output the text in your code, do this:

Then this message too can be customized at MediaWiki:Dirtypageshelp.

See also.

Do not display your Special Page on Special:SpecialPages
Sometimes you may want to limit the visibility of your Special Page by removing it from Special:SpecialPages and making it visible to only those users with a particular right. You can do this in the constructor by passing in a  parameter; e.g., “editinterface”, a right only assigned to sysops by default; see the User rights manual for other available user rights.

Or you can create your own right in the setup file and assign it to sysops, e.g.:

and then call the constructor with your right:

Prevent access to your Special Page
Even if you restrict your page in the constructor, as mentioned above, it will still be viewable directly via the URL, e.g. at Special:MySpecialPage. In order to actually limit access to your SpecialPage you must call in the   method.

If you need more fine-grained control over permissions, you can override, and/or add whatever permissions-checking is required for your extension.

Disabling Special:UserLogin and Special:UserLogout pages
In LocalSettings.php you can use the to unset unwanted built-in special pages. See "making a few SpecialPages restricted" if you need conditional unsetting of special pages for example for certain user groups. The general message "You have requested an invalid special page." is shown if users try to access such unset special pages.

A different approach would be to use the DisabledSpecialPage callback. This approach may be preferred if you're only disabling the special page "temporarily", because the default message in this case would say: "" instead of pretending the page does not exist at all. This gives clear hint that the page maybe activated at a later time.

It is also possible to add custom lengthy explanation of why you're disabling the special page, by giving a message key as the second argument of the callback. To do so first create a system message "MediaWiki:Userlogout-disable-reason" and write all the explanation there. The message will be parsed in a block format. Then in LocalSettings.php add:

Adding logs
On MediaWiki, all actions by users on wiki are tracked for transparency and collaboration. See for how to do it.

Changing the groups on Special:Specialpages
If you're an extension developer, you have to implement the  method as described in the Special page group section of this page.

Since MediaWiki 1.21, the special page group can be overridden by editing a system message. This method is not intended to be used by extension developers, but by site admins. The group name must be placed in the  message, where   is the canonical name (in english) of the special page in lowercase. For example, if you want to set the group under which "Special:MyLittlePage" is displayed on Special:Specialpages to "MyLittleGroup", you just have to create "MediaWiki:Specialpages-specialpagegroup-mylittlepage" with content "MyLittleGroup". "Special:MyLittlePage" will then show up under the group "MyLittleGroup", which you can name under "MediaWiki:Specialpages-group-mylittlegroup".

If you want to change the group of existing special pages, have a look on Special:SpecialPages&uselang=qqx and use those names instead of "mylittlepage".

Unlisting the page from Special:Specialpages
To remove a special page from the Special:Specialpages altogether, pass a as a third parameter to the SpecialPage parent constructor, as described in the SpecialPage Constructor section of this page. If you need more complicated logic to determine whether the page should be listed or not, you can also override the  function, but using the constructor parameter is simpler.

Getting a list of special pages and their aliases on a wiki
Simply use the "siteinfo" API module to retrieve the information from the wiki like e.g. /api.php?action=query&meta=siteinfo&siprop=specialpagealiases.