Handleiding:Speciale pagina's
![MediaWiki extensions](http://upload.wikimedia.org/wikipedia/commons/thumb/2/23/MediaWiki-extensions-icon.svg/125px-MediaWiki-extensions-icon.svg.png)
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. Developers/nl 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 op SpecialSomename.php
genoemd en bevinden zich in de map includes/specials
.
Speciale kernpagina's moeten worden geregistreerd in de kernlijst in includes/specialpage/SpecialPageFactory.php
om door MediaWiki te worden geladen.
Speciale pagina's die door externe ontwikkelaars zijn gemaakt, worden over het algemeen opgeslagen in de map extensions
in hun eigen bestand of als onderdeel van een grotere extensie.
Alle speciale pagina's erven van een class genaamd SpecialPage die is gedefinieerd in includes/specialpage/SpecialPage.php
.
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 namespace kan in andere talen worden vertaald. Deze vertaalde namespace kan worden geproduceerd met de wikitekst {{ns:special}}, op deze wiki met "Special". 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.
- Er zijn verschillende manieren om speciale pagina's te maken, maar de onderstaande wordt gebruikt door het grootste deel van de officiële extensions , en naleving van deze stijl wordt aanbevolen. Zorg er ook voor dat u een creditblok opneemt in de nieuwe speciale pagina voor 'specialpage'. Zie
$wgExtensionCredits
voor meer informatie. - Nadat u een nieuwe speciale pagina heeft gemaakt, moet u deze toevoegen aan Category:Special page extensions/nl , zodat andere mensen de pagina kunnen vinden.
- Speciale pagina's kunnen niet worden opgenomen in frames, tenzij u
$wgOut->allowClickjacking();
gebruikt;
Basissjabloon speciale pagina
MediaWiki 1.25 introduceerde een andere manier om een extensie te laden. Voor oudere niet-ondersteunde versies van MediaWiki, zie een oudere revisie. |
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:
MyExtension/extension.json
– Het bestand voor het instellen.MyExtension/includes/Special.php
– De speciale pagina code.i18n/*.json
– Het localisatie-bestand .
Zet alle bestanden in een nieuwe map in uw MediaWiki map extensions/
Noem de naam van het speciale pagina bestand na de extensie. Bijvoorbeeld, Extension:Gadgets bevat het bestand SpecialGadgets.php
.
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:
wfLoadExtension( 'MyExtension' );
Het bestand voor de configuratie
Voorbeeld van een installatiebestand voor MyExtension/extension.json
:
{
"name": "MyExtension",
"version": "0.0.0",
"author": [
"Your Name"
],
"url": "https://www.mediawiki.org/wiki/Extension:MyExtension",
"descriptionmsg": "myextension-desc",
"license-name": "MIT",
"type": "other",
"AutoloadNamespaces": {
"MediaWiki\\Extension\\MyExtension\\": "src/"
},
"SpecialPages": {
"MyExtension": "MediaWiki\\Extension\\MyExtension\\Special"
},
"MessagesDirs": {
"MyExtension": [
"i18n"
]
},
"manifest_version": 2,
"requires": {
"MediaWiki": ">= 1.41.0",
"platform": {
"php": ">= 5.6"
},
"extensions": {
"dependendExtension": "*"
}
}
}
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.
InvalidArgumentException: Provided specification is not an array
krijgt, betekent dit over het algemeen dat MediaWiki de klasse die is opgegeven in extension.json, die uw speciale pagina implementeert, niet kan vinden.
Het speciale pagina bestand
Het bestand (MyExtension/src/Special.php
) moet een subclass van SpecialPage
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 __construct()
nodig omdat de eerste parameter uw speciale pagina een naam geeft.
execute()
is de belangrijkste functie die wordt aangeroepen wanneer een speciale pagina wordt geopend.
Deze functie overschrijft,voor deze class, de functie SpecialPage::execute()
.
Het geeft de enkele parameter $par
, de subpaginacomponent van de huidige titel.
Als iemand bijvoorbeeld een link naar Special:MyExtension/blah volgt, bevat $par
"blah".
U moet Wikitekst en HTML-uitvoer uitvoeren via $wgOut
. 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 Taking over output in your special page .
<?php
namespace MediaWiki\Extension\MyExtension;
class SpecialMyExtension extends \SpecialPage {
public function __construct() {
parent::__construct( 'MyExtension' );
}
public function execute( $par ) {
$request = $this->getRequest();
$output = $this->getOutput();
$this->setHeaders();
# Haal aanvraaggegevens op van bijvoorbeeld:
$param = $request->getText( 'param' );
# Doe iets wat er moet worden gedaan
# ...
$wikitext = 'Hello world!';
$output->addWikiTextAsInterface( $wikitext );
}
}
Het lokalisatiebestand
- Lees voor hoe het vertaald te krijgen: Help:Systeembericht .
Alle speciale pagina's geven een titel op, zoals 'My Extension'
.
- De titel wordt gebruikt in de
<title>
en<h1>
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,
'myextension'
, moet uit allemaal kleine letters bestaan.
Een voorbeeld van een lokalisatiebestand in $i 18n:
{
"@metadata": {
"authors": [
"<your username>"
]
},
"myextension": "My Extension",
"myextension-desc": "Adds the MyExtension functionality.",
"myextension-summary": "On this special page, do this simple thing and earn wonders.",
"group-myextensionrole": "Role of myextension",
"group-myextensionrole-member": "Member of role of myextension",
"grouppage-myextensionrole": "{{ns:project}}:Role of myextension",
"action-myextension": "XYZ doing.",
"right-myextension": "to do xyz"
}
In i18n/qqq.json
, de bericht documentatie:
{
"@metadata": {
"authors": [
"<your username>"
]
},
"myextension": "The name of the extension's entry in Special:SpecialPages",
"myextension-desc": "{{desc}}",
"myextension-summary": "Description appearing on top of Special:MyExtension.",
"action-myextension": "{{doc-action|myextension}}",
"right-myextension": "{{doc-right|myextension}}"
}
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 -summary
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 MyExtension
een alias zodat de pagina toegankelijk wordt op .../Special:My Extension
en .../Spezial:Meine_Erweiterung
in het Duits.
Voeg uw aliasbestand toe aan extension.json
:
...
"ExtensionMessagesFiles": {
"MyExtensionAlias": "MyExtension.i18n.alias.php"
},
...
Voeg speciale pagina-aliassen toe aan MyExtension.i18n.alias.php
:
<?php
/**
* Aliases for myextension
*
* @file
* @ingroup Extensions
*/
$specialPageAliases = [];
/** English
* @author <uw gebruikersnaam>
*/
$specialPageAliases['en'] = [
'MyExtension' => [ 'MyExtension', 'My Extension' ],
];
/** Deutsch
* @author <uw gebruikersnaam>
*/
$specialPageAliases['de'] = [
'MyExtension' => [ 'MeineErweiterung', 'Meine Erweiterung' ],
];
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 $wgCapitalLinks
waar is, wordt een kleine letter omgezet in hoofdletters en wordt een onderstrepingsteken weergegeven als spatie.
In plaats van het bovenstaande kunnen we bijvoorbeeld 'my_extension' => 'My extension'
gebruiken, ervan uitgaande dat we de extensie consequent elders als my_extension
hebben geïdentificeerd.
Merk op dat in de associatieve array voor de Engelse taal, de tekenreeks die onze SpecialPage identificeert (MyExtension
in het voorbeeld) ook een geldige titel is.
Merk ook op dat het eerste element van $specialPageAliases['en']['MyExtension']
hetzelfde moet zijn als de 'MyExtension'
! 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 SpecialPage::getGroupName()
in uw subclass te overschrijven.
/**
* Het bovenliggende gedeelte overschrijven om in te stellen waar de speciale pagina wordt weergegeven op Special:SpecialPages
* 'other' is de standaardinstelling. Als dat is wat u wilt, hoeft u niet te overschrijven.
* Geef 'media' op om het interfacebericht <code>specialpages-group-media</code> 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 languages/i18n/en.json
en beginnen met specialpages-group-
.
Als u uw speciale pagina onder users
wilt categoriseren, wordt het bericht specialpages-group-users
.
De waarde voor deze sleutel is de tekst die wordt weergegeven als de naam van die categorie, bijvoorbeeld Users and rights
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 messages
in.
In dit voorbeeld definiëren we de groep gamification
:
{
"myextension": "My Extension",
"myextension-desc": "Adds the MyExtension functionality.",
"myextension-summary": "On this special page, do this simple thing and earn wonders",
"specialpages-group-gamification": "Gamification"
}
Ervan uitgaande dat u de returnwaarde voor de methode SpecialPage::getGroupName()
instelt als gamification
in uw definitie van de classes, laadt u Special:SpecialPages opnieuw om uw nieuwe categorie te zien.
Andere belangrijke bestanden
SpecialPage.php
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:
function __construct( $name = '', $restriction = '', $listed = true );
- string
$name
Naam van de speciale pagina, zoals in links en URL's te zien - string
$restriction
User right is vereist, bijvoorbeeld "block" of " delete"; zie ook paginatoegang beperken - boolean
$listed
Of de pagina is opgenomen in de lijst Special:Specialpages
SpecialPage->setHeaders()
Hiermee wordt het object OutputPage $wgOut
geïnitieerd met de naam en beschrijving van uw speciale pagina.
Het moet altijd worden aangeroepen vanuit uw methode execute()
.
SpecialPage->getOutput()
Deze methode geeft een object OutputPage terug dat, zoals hieronder beschreven, kan worden benaderd. Gebruik, zoals in de voorbeeldcode,
$output = $this->getOutput();
$output->addWikiTextAsInterface( 'Hello, World' );
in plaats van de ontraden globale variabele $wgOut
SpecialPage->getRequest()
Deze methode geeft een object WebRequest terug dat, zoals hieronder beschreven, kan worden benaderd. Gebruik, zoals in de voorbeeldcode,
$request = $this->getRequest();
$myparam = $request->getText( 'myparam' );
in plaats van de ontraden globale variabele $wgRequest
SpecialPage->including()
Sommige speciale pagina's kunnen worden toegevoegd (included) vanuit een andere pagina. Als u bijvoorbeeld {{Special:RecentChanges}} 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 __construct()
na de initialisatie van de parent-class:
$this->mIncludable = true;
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.
SpecialPage->execute()
Dit is de functie die uw child class met overload gebruikt moet worden.
Het geeft een enkele parameter door, meestal cryptisch aangeduid als $par
(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 $par
"blah".
Helppagina
MediaWiki-versie: | ≥ 1.25 |
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:
$this->addHelpLink( 'Help:Extension:MyExtension' );
OutputPage.php
OutputPage.php bevat de definitie van classes voor objecten van het type OutputPage
.
U kunt een object van deze class van uw SpecialPage krijgen met behulp van
$output = $this->getOutput();
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 echo
of print
).
Als u het ergens wilt gebruiken, maak dan uw variabele en gebruik die variabele:
function randomFunction() {
$output = $this->getOutput();
$output->addHTML( '<b>This is not a pipe...</b>' );
}
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 includes/OutputPage.php
te bekijken (eigenlijk, deze kunnen allemaal worden gecontroleerd), maar er zijn een paar methoden die u zeker moet kennen.
OutputPage->addHTML()
In wezen de snelle en vuile vervanging van echo
.
Het neemt de uitvoer en voegt het toe aan de buffer.
In de onderstaande actie, als $action
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.
$output->addHTML( '<form action="'.$action.'" method="post">' );
OutputPage->addWikiText()
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.
$output->addWikiText("This is some ''lovely'' [[wikitext]] that will '''get''' parsed nicely.");
Het is opmerkelijk dat de parser uw stukken ziet als samenhangende geheel en paragraaf. Dat is...
$output->addWikiText( '* Item 1' );
$output->addWikiText( '* Item 2' );
$output->addWikiText( '* Item 3' );
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 $this->getOutput()->addHtml( $this->msg( 'key-of-message' )->parse() )
.
Dit zal niet het probleem hebben met de hierboven genoemde gebouwde parser aanroepen.
OutputPage->showErrorPage()
Er wordt een foutpagina weergegeven.
De argumenten $codetile en $msg
geven keys in $this->msg(), geen tekst.
Een voorbeeldː
$output->showErrorPage( 'error', 'badarticleerror' );
- 'error' verwijst naar de tekst "Fout".
- 'badarticleerror' verwijst naar de tekst "Deze handeling kan niet op deze pagina worden verricht.".
U kunt ook berichtobjecten specificeren of parameters toevoegen:
$output->showErrorPage( 'error', 'badarticleerror', [ 'param1', 'param2' ] );
$messageObject = new Message(...);
...
$output->showErrorPage( 'error', $messageObject );
$titleMessageObject = new Message(...);
$messageObject = new Message(...);
...
$output->showErrorPage( $titleMessageObject, $messageObject );
WebRequest.php
De class WebRequest 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 RequestContext .
Database.php
MediaWiki heeft een heleboel functies en wrappers voor interactie met de database, met behulp van de class \Wikimedia\Rdbms\Database.
Het heeft ook een interessant systeem voor belastingbalans.
Het wordt aanbevolen dat u deze wrappers gebruikt.
Kijk naar Database.php
voor een volledige lijst van al deze functies, omdat deze documenten u alleen vertellen over de niet-duidelijke waarschuwingen.
Zie Handboek:Database toegang .
User.php
De class User is een weergave van de gebruikers op het systeem.
SpecialPage->getUser() moet worden gebruikt om een object User te verkrijgen voor de nu ingelogde gebruiker.
Het gebruik van de global $wgUser
wordt ontraden
Title.php
Titel staat voor de naam van een pagina in de wiki.
Dit is nuttig omdat MediaWiki allerlei leuke escapes en speciale case logica doet bij pagina-namen, dus in plaats van uw eigen titel om te zetten naar URL-functie, maakt u een titel object met uw pagina-naam, en gebruikt dan getLocalURL()
om een URL naar die pagina te krijgen.
Om een titel voor uw speciale pagina te krijgen van buiten class speciale pagina, kunt u SpecialPage::getTitleFor( 'YourCanonicalSpecialPageName' )
gebruiken.
Het geeft u een vertaalde titel in de taal van de wiki.
Aangepaste speciale pagina's
Er zijn verschillende manieren om uw eigen speciale pagina's te maken die niet in MediaWiki zijn gebundeld:
- Een methode is het installeren van een extensie die een formulier genereert om een artikel te maken of te bewerken. Een lijst met beschikbare extensies is te vinden op Category:Special page extensions/nl .
- U kunt ook een extensie schrijven dat uw eigen speciale pagina biedt. Het schrijven van uw eigen extensie vereist coderingskunst en comfort met objectgericht ontwerp en databases is ook handig. U moet ook weten hoe u code gebruikt om MediaWiki-artikelen te maken en te bewerken. Voor meer informatie, zie deze discussie.
- U kunt ook een aangepaste pagina weergeven via JavaScript, in plaats van de standaardfoutmelding "Onbekende speciale pagina" (of de melding "Deze pagina is opzettelijk leeg gelaten", als u een subpagina van Special:BlankPage gebruikt). In MediaWiki:Common.js, controle voor wgPageName , verbergt u de MediaWiki-gegenereerde inhoud (voeg gewoon CSS
{visibility:hidden;}
toe) en injecteert u aangepaste HTML (innerHTML
) in dedocument.getElementById('bodyContent')
ofdocument.getElementById('mw_contentholder')
. Zie bijvoorbeeld deze pagina Recente wijzigingen van gebruiker Krinkle.
Veelgestelde vragen
Een titel van de extensie instellen
MediaWiki geeft de titel van de extensie niet aan, wat de taak van de ontwikkelaar is.
Het zal de naam van de extensie zoeken wanneer Special:Specialpages wordt aangeroepen of de speciale pagina wordt geladen.
In de sectie function execute( $par ), gebruik OutputPage-methoden om de extensie een titel te geven, zoals: $this->getOutput()->setPageTitle("your title");
De plaats waar de extensie kan worden gevonden (zoals gespecificeerd door wat wordt doorgestuurd in de SpecialPage constructor) is de key - "behalve" dat het niet in hoofdletter is geschreven vanwege getDescription()
, de intern gebruikte functie die de titel (of, wat ze beschrijving noemen) van de speciale pagina, strtolower
de naam.
De key van "ThisIsAcoolsSpecialPage" zou zijn "thisisacoolspecialpage".
Theoretisch kan getDescription
overschreven worden om te voorkomen dat er interactie is met de berichtencache, maar, zoals de broncode zegt: "Afgeleide classes kunnen dit overschrijven, maar meestal is het gemakkelijker om het standaardgedrag te behouden".
Bovendien voorkomt dit dat de MediaWiki-namespace het bericht overschrijft, zoals hieronder.
De extensienaam vertalen
Dus u heeft net een nieuwe MediaWiki-extensie geïnstalleerd en u realiseert u: "Oh nee, mijn wiki is in het Frans, maar de pagina verschijnt in het Engels!"
De meeste mensen zouden het niet willen, maar het is eigenlijk een vrij eenvoudige taak om het te herstellen (zolang de ontwikkelaar de methode heeft gebruikt die op deze pagina wordt beschreven).
Geen 'handige' improvisatie in de broncode.
Laten we zeggen dat de naam van de pagina DirtyPages
is en de naam komt naar "List of Dirty Pages" maar u wilt dat het (en sorry mijn voor Frans) "Liste de Pages Sales" is.
Het is zo simpel als dit:
- Ga naar MediaWiki:DirtyPages, deze pagina bestaat misschien niet, maar bewerk het toch
- Voeg "Liste de Pages Sales" toe en sla het op
En voilà, de verandering wordt toegepast.
Dit is ook handig om de titel van uw wiki in uw taal aan te passen: bijvoorbeeld, de ontwikkelaar noemde het "List of Dirty Pages" maar u houdt niet van die naam, dus u noemt het "List of Pages needing Cleanup". Bekijk Special:Allmessages voor meer uitleg.
Als uw extensie een groot tekstblok heeft dat verandert, zoals een waarschuwing, voer de tekst dan niet direct uit. Voeg het in plaats daarvan toe aan de berichtencache en wanneer het tijd is om de tekst in uw code uit te voeren, doet u:
$wgOut->addWikiText( $this->msg( 'dirtypageshelp' ) );
Dan kan ook dit bericht op MediaWiki:Dirtypageshelp worden aangepast.
Zie ook Help:Systeembericht .
Beperking van toegang tot pagina's
Uw speciale pagina niet weergeven op Special:SpecialPages
Soms wilt u de zichtbaarheid van een speciale pagina beperken door het te verwijderen uit Special:SpecialPages en het alleen zichtbaar te maken voor gebruikers met een bepaald recht.
Dit kunt u doen in de constructor door een $restriction
parameter door te geven; bijvoorbeeld "editinterface", een recht dat alleen standaard aan sysops wordt toegewezen; zie deze handleiding voor andere beschikbare gebruikersrechten.
function __construct() {
parent::__construct( 'MyExtension', 'editinterface' ); // beperkt tot sysops
}
Of u kunt uw eigen recht in het setupbestand maken en het toewijzen aan sysops, bijvoorbeeld:
"AvailableRights": [
"myextension-right"
],
"GroupPermissions": {
"sysop": {
"myextension-right": true
}
}
en dan de constructor met uw rechten aanroepen:
function __construct() {
parent::__construct( 'MyExtension', 'myextension-right' );
}
Toegang tot uw speciale pagina voorkomen
Zelfs als u uw pagina in de constructor beperkt, zoals hierboven vermeld, zal deze nog steeds direct te bekijken zijn via de URL, bijvoorbeeld met Special:MySpecialPage.
Om de toegang tot uw SpecialPage te beperken, moet u $this->checkPermissions()
aanroepen in de methode execute
.
Als u meer controle over de toestemming nodig heeft, kunt u $this->checkPermissions()
overschrijven en/of de controle toevoegen die nodig is voor uw extensie.
Uitzetten pagina's Special:UserLogin en Special:UserLogout pages
In LocalSettings.php kunt u de SpecialPage_initList hook gebruiken om ongewenste ingebouwde speciale pagina's te onderdrukken. Zie "making a few SpecialPages restricted" als u een conditionele uitschakeling van bepaalde speciale pagina's nodig heeft bijvoorbeeld voor bepaalde gebruikersgroepen. Het algemene bericht U hebt een ongeldige speciale pagina aangevraagd wordt weergegeven als gebruikers proberen toegang te krijgen tot dergelijke onderdrukte speciale pagina's.
$wgHooks['SpecialPage_initList'][] = function ( &$list ) {
unset( $list['Userlogout'] );
unset( $list['Userlogin'] );
return true;
};
Een andere benadering zou zijn om de callback van DisabledSpecialPage te gebruiken. Deze benadering kan voorkeur krijgen als u de speciale pagina "tijdelijk" alleen uitschakelt, omdat het standaardbericht in dit geval zou zeggen: "Deze pagina is uitgeschakeld door een systeembeheerder." in plaats van te doen alsof de pagina helemaal niet bestaat. Dit geeft een duidelijke hint dat de pagina later mogelijk geactiveerd gaat worden.
$wgSpecialPages['Userlogout'] = DisabledSpecialPage::getCallback( 'Userlogout' );
$wgSpecialPages['Userlogin'] = DisabledSpecialPage::getCallback( 'Userlogin' );
Het is ook mogelijk om een aangepaste lange verklaring toe te voegen van waarom die speciale pagina is uitgeschakeld, door een berichtsleutel te geven als het tweede argument van de callback. Om dit te doen, moet u eerst een systeembericht "MediaWiki:Userlogout-disable-reason" maken en daar alle uitleg schrijven. Het bericht wordt in blokformaat geanalyseerd. Voeg dan in LocalSettings.php toe:
$wgSpecialPages['Userlogout'] = DisabledSpecialPage::getCallback( 'Userlogout', 'Userlogout-disable-reason' );
Logs toevoegen
in Mediawiki worden alle gebruikersactie op een wiki gevolgd tbv transparantie en samenwerking. Bekijk ̯Manual:Logging to Special:Log hoe dat gedaan kan worden.
De groepen op Special:Specialpages veranderen
Als u een ontwikkelaar van extensies bent, moet u de methode getGroupName()
implementeren zoals beschreven in de sectie Speciale paginagroep van deze pagina.
Sinds MediaWiki 1.21, kan de speciale paginagroep worden overschreven door het bewerken van een systeembericht.
Deze methode is niet bedoeld voor gebruik door ontwikkelaars, maar voor gebruik door site-beheerders.
De groepsnaam moet worden geplaatst in het bericht specialpages-specialpagegroup-<special page name>
, waar <special page name>
de canonische naam (in het Engels) van de speciale pagina in kleine letters is.
Als u bijvoorbeeld de groep wilt instellen waaronder Special:MyLittlePage
wordt weergegeven op Special:Specialpages als MyLittleGroup
, moet u gewoon MediaWiki:Specialpages-specialpagegroup-mylittlepage
de inhoud MyLittleGroup
geven.
Special:MyLittlePage
wordt vervolgens weergegeven onder de groep MyLittleGroup
, die u kunt noemen onder MediaWiki:Specialpages-group-mylittlegroup
.
Als u de groep van bestaande speciale pagina's wilt wijzigen, kijk dan naar Special:SpecialPages&uselang=qqx en gebruik die namen in plaats van "mylittlepage".
Het verwijderen van de pagina uit Special:Specialpages
Om een speciale pagina uit de Special:Specialpages volledig te verwijderen, geef een false
als derde parameter door aan de SpecialPage constructor van de parent, zoals beschreven in de sectie SpecialPage Constructor van deze pagina.
Als u meer ingewikkelde logica nodig hebt om te bepalen of de pagina moet worden vermeld of niet, kunt u ook de functie isListed()
overschrijven, maar het gebruik van de constructor-parameter is eenvoudiger.
Het krijgen van een lijst met speciale pagina's en hun aliassen op een wiki
Gebruik gewoon de API-module "siteinfo" om de informatie uit de wiki te halen zoals bijvoorbeeld /api.php?action=query&meta=siteinfo&siprop=specialpagealiases.
Zie ook
- HTMLForm – Tutorial over het maken van checkboxes, text areas, radioknoppen, enz. op speciale pagina's