Manual:Developing extensions/de



Jede Erweiterung besteht aus drei Teilen:


 * 1) Einrichtung
 * 2) Ausführung
 * 3) Lokalisierung

Eine minimale Erweiterung besteht aus der folgenden Struktur:


 * MyExtension/extension.json: Speichert die setup-Anleitung. Der Dateiname muss "extension.json" lauten. (Vor MediaWiki 1.25 befanden sich die Setup-Anweisungen in einer -Datei, die nach der Erweiterung benannt wurde. Viele Erweiterungen halten in dieser PHP-Datei noch Abwärtskompatibilitäten bereit.)
 * MyExtension/includes/: Enthält den auszuführenden PHP-Code für die Erweiterung.
 * MyExtension/resources/: Stores the client-side resources such as JavaScript, CSS and LESS for the extension.
 * MyExtension/i18n/*.json: Enthält Lokalisierungsinformation für die Erweiterung.

Wenn du eine Erweiterung entwickelst, ersetze MyExtension durch den tatsächlichen Namen deiner Erweiterung. Benutze UpperCamelCase-Namen für das Verzeichnis und die PHP-Datei(en); das entspricht der allgemeinen Dateinamenskonvention. (Ein guter Ausgangspunkt für eine eigene Erweiterung ist die .)

Einrichtung
Ihr Ziel beim Schreiben des Setup-Teils ist es, die Installation der Erweiterung so einfach wie möglich zu gestalten, sodass Benutzer diese Zeile nur zu LocalSettings.php hinzufügen müssen:

Wenn Sie Ihren Erweiterungsbenutzer konfigurierbar machen möchten, müssen Sie einige Konfigurationsparameter definieren und dokumentieren. Das Setup Ihrer Benutzer sollte ungefähr so aussehen:

Um diese Einfachheit zu erreichen, muss Ihre Setup-Datei eine Reihe von Aufgaben ausführen (die in den folgenden Abschnitten ausführlich beschrieben werden):


 * register any media handler, parser function, special page, custom XML tag, and variable used by your extension.
 * Definieren und / oder validieren Sie alle Konfigurationsvariablen, die Sie für Ihre Erweiterung definiert haben.
 * Bereiten Sie die von Ihrer Erweiterung verwendeten Klassen für das automatische Laden vor
 * Legen Sie fest, welche Teile Ihres Setups sofort ausgeführt werden sollen und welche zurückgestellt werden müssen, bis der MediaWiki-Kern initialisiert und konfiguriert wurde
 * Definieren Sie alle zusätzlichen hooks, die von Ihrer Erweiterung benötigt werden
 * Erstellen oder überprüfen Sie alle neuen Datenbanktabellen, die für Ihre Erweiterung erforderlich sind.
 * Richten Sie die Lokalisierung für Ihre Erweiterung ein

Registrieren von Funktionen bei MediaWiki
MediaWiki listet alle Erweiterungen auf, die auf der Seite  installiert wurden. Beispielsweise können Sie alle in diesem Wiki installierten Erweiterungen unter Special:Version anzeigen.

Um diese zu erreichen, sind die Erweiterungsdetails zu extension.json hinzuzufügen. Der Eintrag sieht ungefähr so aus:

Viele der Felder sind optional, aber es wird immer noch empfohlen, sie auszufüllen. The  refers to the version of the schema the  file is written against. Die verfügbaren Versionen sind 1 und 2. Eine Dokumentation zu dieser Funktion findet sich hier. Unless you need to support an older version of MediaWiki, pick the latest version.

Zusätzlich zu der oben genannten Registrierung müssen Sie Ihre Funktion auch in MediaWiki "einbinden". Das Obige richtet nur die Seite Special: Version ein. The way you do this depends on the type of your extension. Einzelheiten finden Sie in der Dokumentation zu den einzelnen Erweiterungstypen:

Machen Sie Ihre Erweiterung konfigurierbar
Wenn Ihr Benutzer Ihre Erweiterung konfigurieren kann, müssen Sie eine oder mehrere Konfigurationsvariablen angeben. Es ist eine gute Idee, diesen Variablen einen eindeutigen Namen zu geben. Sie sollten auch MediaWiki Namenskonventionen folgen (z. B. sollten globale Variablen mit $wg beginnen).

Wenn die Erweiterung beispielsweise "MeineErweiterung" heißt, liegt es nahe, die Benennung aller Konfigurationsvariablen mit  beginnen zu lassen. Dabei ist wichtig, dass keine des MediaWiki-Kerns seine Variablen auf diese Weise beginnt und in ausreichender Weise überprüft wurde, dass keine der veröffentlichten Erweiterungen ihre Variablen auf diese Weise beginnt. Benutzer müssen sich nicht zwischen Ihrer Erweiterung und einigen anderen Erweiterungen entscheiden, da Sie überlappende Variablennamen ausgewählt haben.

Es ist auch eine gute Idee, eine ausführliche Dokumentation aller Konfigurationsvariablen in Ihre Installationshinweise aufzunehmen.

Hier ist eine Beispielvorlage, mit der Sie loslegen können:

Note that after calling  the global variable   does not exist. If you set the variable, e.g. in  then the default value given in extension.json will not be used.

For more details on how to use global variable inside custom extensions, please refer to.

Klassen für das automatische Laden vorbereiten
Wenn Sie Klassen zum Implementieren Ihrer Erweiterung verwenden, bietet MediaWiki einen vereinfachten Mechanismus, mit dem PHP die Quelldatei finden kann, in der sich Ihre Klasse befindet. In most cases this should eliminate the need to write your own  method.

To use MediaWiki's autoloading mechanism, you add entries to the field. Der Schlüssel jedes Eintrags ist der Klassenname. Der Wert ist die Datei, in der die Definition der Klasse gespeichert ist. Bei einer einfachen Erweiterung mit einer Klasse erhält die Klasse normalerweise denselben Namen wie die Erweiterung, sodass Ihr Abschnitt zum automatischen Laden möglicherweise folgendermaßen aussieht (die Erweiterung heißt "MyExtension"):

Der Dateiname bezieht sich auf das Verzeichnis, in dem sich die Datei extension.json befindet.

For more complex extensions, namespaces should be considered. See Manual:Extension.json/Schema#AutoloadNamespaces for details.

Zusätzliche Hooks definieren
Siehe.

Datenbank Tabellen hinzufügen
Make sure the extension doesn't modify the core database tables. Instead, extension should create new tables with foreign keys to the relevant MW tables.

If your extension needs to add its own database tables, use the hook. Weitere Informationen zur Verwendung finden Sie auf der Handbuchseite.

Lokalisierung einrichten
Siehe:
 * Lokalisierung (Zusammenfassung)

Logs hinzufügen
In MediaWiki werden alle Aktionen von Benutzern im Wiki auf Transparenz und Zusammenarbeit hin verfolgt. Siehe für die Durchführung.

Handling dependencies
Assume that an extension requires the presence of another extension, for example because functionalities or database tables are to be used and error messages are to be avoided in case of non-existence.

For example the extension requires the presence of the extension  for certain functions. Some ideas to figure this out:

This should work at least from 1.23 up to 1.35.

Lokalisierung
Wenn Sie möchten, dass Ihre Erweiterung in Wikis mit mehrsprachiger Leserschaft verwendet wird, müssen Sie Ihrer Erweiterung Lokalisierungsunterstützung hinzufügen.

Speichern Sie Nachrichten in .json
Speichern Sie Nachrichtendefinitionen in einer Lokalisierungs-JSON-Datei, eine für jeden Sprachschlüssel, in den Ihre Erweiterung übersetzt wird. Die Nachrichten werden mit einem Nachrichtenschlüssel und die Nachricht selbst im Standard-JSON-Format gespeichert. Jede Nachrichten-ID sollte in Kleinbuchstaben geschrieben sein und darf keine Leerzeichen enthalten. Each key should begin with the lowercased extension name. Ein Beispiel findet sich in der MobileFrontend-Erweiterung. Hier ist ein Beispiel für eine minimale JSON-Datei (in diesem Fall en.json:

en.json

Speichern Sie die Nachrichtendokumentation in qqq.json
Die Dokumentation für Nachrichtenschlüssel kann in der JSON-Datei für die Pseudosprache mit dem Code qqq gespeichert werden. Eine Dokumentation des obigen Beispiels kann sein:

qqq.json:

Laden Sie die Lokalisierungsdatei
In der extension.json ist der Speicherort der Nachrichtendateien (z. B. im Verzeichnis i18n/) festzulegen:

Verwenden Sie wfMessage in PHP
Ersetzen Sie in Ihrem Setup- und Implementierungscode jede wörtliche Verwendung der Nachricht durch einen Aufruf von. In Klassen, die implementieren (sowie in einigen anderen, z. B. Unterklassen von SpecialPage), können Sie stattdessen   verwenden. Beispiel:

Verwenden Sie mw.message in JavaScript
Es ist auch möglich, i18n-Funktionen in JavaScript zu verwenden. Look at for details.

Erweiterungstypen
Erweiterungen können basierend auf den Programmiertechniken kategorisiert werden, mit denen ihre Wirkung erzielt wird. Die meisten komplexen Erweiterungen verwenden mehr als eine dieser Techniken:


 * Unterklasse: MediaWiki erwartet, dass bestimmte Arten von Erweiterungen als Unterklassen einer von MediaWiki bereitgestellten Basisklasse implementiert werden:
 *  – Unterklassen der -Klasse werden zum Erstellen von Seiten verwendet, deren Inhalt mithilfe einer Kombination aus dem aktuellen Systemstatus, Benutzereingabeparametern und Datenbankabfragen dynamisch generiert wird. Es können sowohl Berichte als auch Dateneingabeformulare generiert werden. Sie werden sowohl für Berichts- als auch für Verwaltungszwecke verwendet.
 *  – Skins ändern das Erscheinungsbild von MediaWiki, indem sie den Code ändern, der Seiten ausgibt, indem sie die MediaWiki-Klasse unterordnen.
 *  – Eine Technik zum Einfügen von benutzerdefiniertem PHP-Code an wichtigen Punkten der MediaWiki-Verarbeitung. Sie werden häufig vom Parser von MediaWiki, seiner Lokalisierungs-Engine, seinem Erweiterungsverwaltungssystem und seinem Seitenpflegesystem verwendet.
 *  – XML Stil-Tags, die einer PHP-Funktion zugeordnet sind, die HTML-Code ausgibt. Sie müssen sich nicht darauf beschränken, den Text in den Tags zu formatieren. Sie müssen es nicht einmal anzeigen. Viele Tag-Erweiterungen verwenden den Text als Parameter für die Generierung von HTML, in das Google-Objekte, Dateneingabeformulare, RSS-Feeds und Auszüge aus ausgewählten Wiki-Artikeln eingebettet sind.
 *  – Eine Technik zum Zuordnen einer Vielzahl von Wiki-Textzeichenfolgen zu einer einzelnen ID, die einer Funktion zugeordnet ist. Sowohl Variablen als auch Parser-Funktionen verwenden diese Technik. Der gesamte dieser ID zugeordnete Text wird durch den Rückgabewert der Funktion ersetzt. Die Zuordnung zwischen den Textzeichenfolgen und der ID wird im Array $magicWords gespeichert. Die Interpretation der ID ist ein etwas komplexer Prozess - siehe für weitere Informationen.
 *  – Variablen sind eine Art Fehlbezeichnung. Es handelt sich um Wikitext-Bits, die wie Vorlagen aussehen, jedoch keine Parameter haben und fest codierte Werte erhalten haben. Standard-Wiki-Markups wie oder  sind Beispiele für Variablen. Sie erhalten ihren Namen von der Quelle ihres Wertes: eine PHP-Variable oder etwas, das einer Variablen zugewiesen werden könnte, z. eine Zeichenfolge, eine Zahl, ein Ausdruck oder ein Funktionsrückgabewert.
 *  – .  Ähnlich wie bei Tag-Erweiterungen verarbeiten Parser-Funktionen Argumente und geben einen Wert zurück. Im Gegensatz zu Tag-Erweiterungen ist das Ergebnis von Parser-Funktionen  wikitext.
 *  – you can add custom modules to MediaWiki's action API, that can be invoked by JavaScript, bots or third-party clients.
 *  – If you need to store data in formats other than wikitext, JSON, etc. then you can create a new.

Unterstützt andere Kernversionen
Es gibt zwei weit verbreitete Konventionen zur Unterstützung älterer Versionen von MediaWiki Core:


 * Master: Der Master-Zweig der Erweiterung ist mit so vielen alten Core-Versionen wie möglich kompatibel. Dies führt zu einem Wartungsaufwand (Abwärtskompatibilitäts-Hacks müssen lange Zeit beibehalten werden, und Änderungen an der Erweiterung müssen mit mehreren MediaWiki-Versionen getestet werden). Websites, auf denen alte MediaWiki-Versionen ausgeführt werden, profitieren jedoch von den kürzlich hinzugefügten Funktionen Erweiterung.
 * Freigabezweige: Freigabezweige der Erweiterung sind mit übereinstimmenden Zweigen des Kerns kompatibel, z. Sites, die MediaWiki verwenden, müssen den Zweig  der Erweiterung verwenden. (Bei Erweiterungen, die auf gerrit gehostet werden, werden diese Zweige automatisch erstellt, wenn neue Versionen von MediaWiki veröffentlicht werden.) Dies führt zu sauberem Code und einer schnelleren Entwicklung, aber Benutzer alter Kernversionen profitieren nur dann von Bugfixes und neuen Funktionen, wenn dies der Fall ist  Backported manuell.

Extension maintainers should declare with the  parameter of the Extension template which convention they follow.

Veröffentlichung
To autocategorize and standardize the documentation of your existing extension, please see. So fügen Sie Ihrem Wiki Ihre neue Erweiterung hinzu:

Bereitstellen und Registrieren
Wenn Sie beabsichtigen, Ihre Erweiterung auf Wikimedia-Websites (einschließlich möglicherweise Wikipedia) bereitzustellen, ist eine zusätzliche Prüfung in Bezug auf Leistung und Sicherheit erforderlich. Consult.

If your extension adds namespaces, you may wish to register its default namespaces; likewise, if it adds database tables or fields, you may want to register those at.

Bitte beachten Sie, dass die Überprüfung und Bereitstellung neuer Erweiterungen auf Wikimedia-Websites sehr langsam sein kann und in einigen Fällen mehr als zwei Jahre gedauert hat.

Hilfedokumentation
Sie sollten Public-Domain-Hilfedokumentation für Funktionen bereitstellen, die von Ihrer Erweiterung bereitgestellt werden. ist ein gutes Beispiel. Sie sollten Benutzern über die Funktion einen Link zur Dokumentation geben.

Bereitstellung von Unterstützung/Zusammenarbeit
Erweiterungsentwickler sollten ein Konto bei Wikimedia eröffnen und ein neues Projekt für die Erweiterung anfordern. Dies bietet einen öffentlichen Ort, an dem Benutzer Probleme und Vorschläge einreichen können, und Sie können mit Benutzern und anderen Entwicklern zusammenarbeiten, um Fehler zu ermitteln und Funktionen Ihrer Erweiterung zu planen.

Siehe auch

 * – implementiert einige Beispielfunktionen mit umfangreicher Inline-Dokumentation
 * – Eine funktionierende Boilerplate-Erweiterung, die als Ausgangspunkt für Ihre eigene Erweiterung dient
 * Lesen Sie die Beispielerweiterung und stützen Sie Ihren eigenen Code auf die BoilerPlate-Erweiterung.
 * cookiecutter-mediawiki-extension – eine cookiecutter Vorlage, die eine Boilerplate-Erweiterung generiert (mit Variablen usw.)
 * Ermöglicht es Ihnen, mit Ihrer eigenen Erweiterung schnell loszulegen.
 * Kann auch die BoilerPlate-Erweiterung generieren.
 * - Kopieren Sie bestimmten Code von ihnen
 * – erklärt, wie Ihre Erweiterung Clients eine API bereitstellen kann
 * Best practices for extensions
 * Best practices for extensions
 * Best practices for extensions
 * Best practices for extensions
 * Best practices for extensions