Karin Haenelt: Programmierung von Extensionen für das MediaWiki, 13.3.2013, 1 /26 Programmierung von Extensionen für das MediaWiki Eine Hinführung zum Thema Karin Haenelt 13.3.2013 ( 1 4.9.2012) Inhalt Programmierung von Extensionen für das MediaWiki ........................................................ 1 1 Einführung ..................................................................................................................... 2 2 Einbindung von Extensionen in das MediaWiki ............................................................ 3 3 Arten von Extensionen .................................................................................................. 4 4 Beispiel 1: HelloWorld – Textausgabe auf einer Wikiseite ........................................... 4 4.1 Quelltext der Wikiseite “Test” ................................................................................. 5 4.2 Ansicht der Wikiseite “Test” .................................................................................... 5 4.3 Programm HelloWorld.php ...................................................................................... 5 4.3.1 Vollständiger Quellcode der Extension ................................................................ 5 4.3.2 Einleitungskommentar ......................................................................................... 6 4.3.3 Prüfung der Einbindung in MediaWiki ................................................................. 6 4.3.4 Registrierung der Extension für die Seite Spezial:Version im MediaWiki ........... 6 4.3.5 Registrierung der Extension im MediaWiki.......................................................... 7 4.3.6 Funktionaler Kern der Extension .......................................................................... 7 4.4 localSettings.php ...................................................................................................... 8 5 Beispiel 2: CategoryList – Datenbankabfrage und Ausgabe auf einer Wikiseite .......... 8 5.1 Quelltext der Wikiseite “Test” ................................................................................. 8 5.2 Ansicht der Wikiseite “Test” .................................................................................... 8 5.3 Programm CategoryList.php .................................................................................... 8 5.3.1 Vollständiger Quellcode der Extension ................................................................ 9 5.3.2 Einleitung und Registrierung .............................................................................. 12 5.3.3 Funktionaler Kern der Extension ........................................................................ 12 5.3.4 Vorbereitung der Tabellenausgabe.................................................................... 12 5.3.5 Datenbankabfrage.............................................................................................. 14 5.3.6 Verarbeitung der Ergebnisse der Datenbankabfrage ........................................ 16
26
Embed
Programmierung von Extensionen für das MediaWikikontext.fraunhofer.de/haenelt/kurs/Skripten/Wiki-Anleitungen/Haenelt... · 4.3.4 Registrierung der Extension für die Seite Spezial:Version
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Karin Haenelt: Programmierung von Extensionen für das MediaWiki, 13.3.2013, 1 /26
Programmierung von Extensionen für das MediaWiki
Eine Hinführung zum Thema
Karin Haenelt
13.3.2013 (14.9.2012)
Inhalt
Programmierung von Extensionen für das MediaWiki ........................................................ 1
* modify it under the terms of the GNU General Pub lic License * as published by the Free Software Foundation; ei ther version 2 * of the License, or (at your option) any later ve rsion. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the impli ed warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURP OSE. See the * GNU General Public License for more details. */ if( !defined( 'MEDIAWIKI' ) ) die( "This is an exte nsion to the MediaWiki package and cannot be run standalone." ); # credits $wgExtensionCredits['parserhook'][] = array ( 'name' => 'HelloWorld', 'url' => '', 'version' => '1.0', 'svn-revision' => '', 'author' => "Karin Haenelt", 'description' => "", ); $wgExtensionFunctions[] = 'registerHelloWorld'; # registering extension function registerHelloWorld() { global $wgParser; $wgParser->setHook('hW', 'myHelloWorld'); } # parser function function myHelloWorld() { $output = "hello World"; return $output; }
4.3.2 Einleitungskommentar
Die Zeilen 3-17 enthalten den Einleitungskommentar für die Extension. Davon enthalten die
Zeilen 8 bis 17 einen für open source Programme üblichen Hinweis auf die GNU General
Public License.
4.3.3 Prüfung der Einbindung in MediaWiki
Die Zeilen 19-20 enthalten eine Überprüfung der Einbindung in das MediaWiki.
4.3.4 Registrierung der Extension für die Seite Spezial:Version im MediaWiki
MediaWiki listet auf der Seite Spezial:Version die jeweils eingebundenen Extensionen. Es ist
gute Praxis, für die Eintragung einer Extension auf der Seite Spezial:Version zu sorgen. Die
Information hierfür wird in dem Array $wgExtensionCredits gespeichert. Die Zeilen 22 bis
Karin Haenelt: Programmierung von Extensionen für das MediaWiki, 13.3.2013, 7 /26
29 zeigen die Spezifikation für die Extension HelloWorld. Die hier angegebene Information
wird wie folgt auf der Seite Spezial:Version angezeigt:
Abbildung 2 Anzeige der Einbindung der Extension auf der Wikiseite Spezial:Version
4.3.5 Registrierung der Extension im MediaWiki
Die Registrierung der Funktion im MediaWiki erfolgt in den Zeilen 32 bis 38:
32 33 34 35 36 37 38
$wgExtensionFunctions[] = 'registerHelloWorld'; # registering extension function registerHelloWorld() { global $wgParser; $wgParser->setHook('hW', 'myHelloWorld'); }
$wgExtensionFunction[] ist eine Liste von callback Funktionen, die aufgerufen werden,
wenn MediaWiki vollständig initialisiert ist. Im aktuellen Fall soll die Funktion
registerHelloWorld aufgerufen werden. Diese Funktion ist in den Folgezeilen spezifiziert.
$wgParser->setHook('hW', 'myHelloWorld'); sorgt dafür, dass MediaWiki das Tags
<hW> mit der Funktion myHelloWorld verbindet und beim Auftreten dieses Tags auf einer
Wikiseite diese Funktion zur Interpretation des Tags aufruft.
4.3.6 Funktionaler Kern der Extension
Der funktionale Kern der Extension, d.h. die Funktion, die beschreibt, welche Operation beim
Auftreten des Tags <hW> ausgeführt werden soll, steht in den Zeilen 40 bis 45:
40 41 42 43 44 45
# parser function function myHelloWorld() { $output = "hello World"; return $output; }
In unserem Beispiel findet nur eine ganz kleine Aktion statt: Die Variable $output erhält den
Inhalt “hello World” und wird dann als Rückgabewert an das MediaWiki-Kernsystem
Karin Haenelt: Programmierung von Extensionen für das MediaWiki, 13.3.2013, 8 /26
zurückgegeben. Auch HTML-Anweisungen können im Rückgabewert enthalten sein (z.B.
<b>hello World</b>). Das MediaWiki-Kernsystem sorgt dafür, dass der Rückgabewert auf
der MediaWiki-Seite erscheint.
4.4 localSettings.php
In die Datei localSettings.php schreiben wir nun noch die folgende Zeile:
Eine Anleitung zur Programmierung von Extensionen mit Spezialseiten findet sich unter:
http://www.mediawiki.org/wiki/Manual:Special_pages. Für den allgemeinen Fall sei auf
diese Seite verwiesen. Dort ist als Vorlage für die Programmierung von Extensionen ein
Beispiel “MyExtension” durchgespielt. Wir zitieren hier das Beispiel.
Nach MediaWiki-Konventionen gehören zu einer Spezialseitenextension mindestens die
folgenden Seiten
- <ExtensionName>.php Die Installationsseite. <ExtensionName> ist durch
den Namen der eigenen Extension zu ersetzen.
- Special<ExtensionName>.php Das Programm für die Spezialseite (der
eigentliche Code der Extension)
- <ExtensionName>.i18n.php Die Internationalisierungsdatei, die die
Meldungen des Programms in verschiedenen
Sprachen enthält
- <ExtensionName>.alias.php Die Alias-Datei der Spezialseite, die den Namen
der Spezialseite in verschiedenen Sprachen enthält
Die Beispiele der vier Dateien unter http://www.mediawiki.org/wiki/Manual:Special_pages
sind (die Dateien können direkt im Quellcode übernommen und als Extension eingebunden
werden):
6.1 Die Installationsdatei: MyExtension.php
<?php # Alert the user that this is not a valid entry poi nt to MediaWiki if they try to access the special pages file directly. if (!defined('MEDIAWIKI')) { echo <<<EOT To install my extension, put the following line in LocalSettings.php:
Karin Haenelt: Programmierung von Extensionen für das MediaWiki, 13.3.2013, 18 /26
require_once( "$IP/extensions/MyExtension/MyExtensi on.php" ); EOT; exit( 1 ); } $wgExtensionCredits['specialpage'][] = array( 'path' => __FILE__, 'name' => 'MyExtension', 'author' => 'My name', 'url' => 'https://www.mediawiki.org/wiki/Ex tension:MyExtension', 'descriptionmsg' => 'myextension-desc', 'version' => '0.0.0', ); $dir = dirname(__FILE__) . '/'; # Location of the SpecialMyExtension class # (Tell MediaWiki to load this file) $wgAutoloadClasses['SpecialMyExtension'] = $dir . ' SpecialMyExtension.php'; # Location of a messages file (Tell MediaWiki to lo ad this file) $wgExtensionMessagesFiles['MyExtension'] = $dir . ' MyExtension.i18n.php'; # Location of an aliases file (Tell MediaWiki to lo ad this file) $wgExtensionMessagesFiles['MyExtensionAlias'] = $di r . 'MyExtension.alias.php'; # Tell MediaWiki about the new special page and its class name $wgSpecialPages['MyExtension'] = 'SpecialMyExtensio n';
6.2 Die Spezialseite: SpecialMyExtension.php
<?php class SpecialMyExtension extends SpecialPage { function __construct() { parent::__construct( 'MyExtension' ); } function execute( $par ) { global $wgRequest, $wgOut; $this->setHeaders(); # Get request data from, e.g. $param = $wgRequest->getText('param '); # Do stuff # ... $output = 'Hello world!'; $wgOut->addWikiText( $output ); } }
6.3 Die Internationalisierungsdatei: MyExtension.i18n.php
<?php /** * Internationalisation for myextension * * @file
Karin Haenelt: Programmierung von Extensionen für das MediaWiki, 13.3.2013, 19 /26
* @ingroup Extensions */ $messages = array(); /** English * @author <your username> */ $messages['en'] = array( 'myextension' => 'My Extension', // Importa nt! This is the string // that appears o n Special:SpecialPages 'myextension-desc' => "Extension's descript ion", ); /** Message documentation * @author <your username> */ $messages['qqq'] = array( 'myextension-desc' => "{{desc}}", );
Das Beispiel liefert eine Spezialseite, auf der man einen Parameter als Zeichenkette eingeben
kann. Die Verarbeitung des Parameters besteht darin, dass der Parameterwert auf der Seite
ausgegeben wird. An dieser Stelle wären auch andere Arten der Verarbeitung möglich.
Das Einlesen von Parametern ist mit Hilfe der WebRequest-Klasse des MediaWiki-Pakets
($IP/includes/WebRequest.php) möglich. Ein Hinweis auf die Schnittstelle findet sich auf der
Seite http://www.mediawiki.org/wiki/Manual:Special_pages#WebRequest.php. Die
Schnittstelle funktioniert wie folgt:
- einbinden von global $wgRequest in den Code der Extension
- Verwendung der Funktionen dieser Klasse, beispielsweise WebRequest-
>getVal($key)
Wir geben die Quellcode-Dateien für die Spezialseite mit Parametereingabe an.
7.1 Die Installationsdatei: MyExtensionP.php
<?php # Alert the user that this is not a valid entry poi nt to MediaWiki if they try to access the special pages file directly. if (!defined('MEDIAWIKI')) { echo <<<EOT
Karin Haenelt: Programmierung von Extensionen für das MediaWiki, 13.3.2013, 21 /26
To install my extension, put the following line in LocalSettings.php: require_once( "$IP/extensions/MyExtensionP/MyExtens ionP.php" ); EOT; exit( 1 ); } $wgExtensionCredits['specialpage'][] = array( 'path' => __FILE__, 'name' => 'MyExtensionP', 'author' => 'Karin Haenelt', 'url' => 'https://www.mediawiki.org/wiki/Ex tension:MyExtension', 'descriptionmsg' => 'myextensionp-desc', 'version' => '0.0.0', ); $dir = dirname(__FILE__) . '/'; # Location of the SpecialMyExtensionP class # (Tell MediaWiki to load this file) $wgAutoloadClasses['SpecialMyExtensionP'] = $dir . 'SpecialMyExtensionP.php'; # Location of a messages file (Tell MediaWiki to lo ad this file) $wgExtensionMessagesFiles['MyExtensionP'] = $dir . 'MyExtensionP.i18n.php'; # Location of an aliases file (Tell MediaWiki to lo ad this file) $wgExtensionMessagesFiles['MyExtensionPAlias'] = $d ir . 'MyExtensionP.alias.php'; # Tell MediaWiki about the new special page and its class name $wgSpecialPages['MyExtensionP'] = 'SpecialMyExtensi onP';
'myextensionp' => 'My Extension with Parameters', / / Important! // This is the string that appears on Special:Speci alPages 'myextensionp-desc' => "Test of a SpecialPage exten sion with Parameters",
'myextensionp-enter' => "enter", 'myextensionp-parameter1' => "parameter 1 (please enter an arbitrary string)", 'myextensionp-parameter1-entered' => "The following value has been
Karin Haenelt: Programmierung von Extensionen für das MediaWiki, 13.3.2013, 23 /26
'myextensionp' => 'Meine Extension mit Parametern', // Important! // This is the string that appears on Special:Speci alPages 'myextensionp-desc' => "Test einer Spezialseitenext ension mit
Parametern", 'myextensionp-enter' => "eingeben",
'myextensionp-parameter1' => 'Parameter 1 (bitte e ine beliebige Zeichenkette eingeben)', 'myextensionp-parameter1-entered' => 'Der folgende Wert wurde