Manual:Extension registration/de

Extension registration ist der Mechanismus, den MediaWiki nutzt um Erweiterungen und Skins zu laden. Konfigurationsdaten werden in eine Datei mit dem Namen  oder   im Stammverzeichnis Ihrer Erweiterung oder Skins eingetragen und MediaWiki verwendet diese Daten um Erweiterungen und Skins zu registrieren.

Vor MediaWiki 1.25 wurde die Konfiguration für Erweiterungen und Skins in einer PHP-Datei mit gleichem Namen wie die Erweiterung oder der Skin geschrieben, zum Beispiel  oder. Dieses Vorgehen ist veraltet und Entwickler von vorhandenen Erweiterungen und Skins sollten beginnen ihre Erweiterungen in das neue Format zu Migrieren.

Migration für Systemadministratoren
Früher hätten Sie in Ihre LocalSettings.php etwa folgendes eingetragen:

Dies schreibt man jetzt so:

Wenn Sie Ihre Erweiterungen in einem anderen Verzeichnis als $IP/extensions gespeichert haben, müssen Sie  ändern. Wenn Ihr Skin nicht im Verzeichnis $IP/skins gespeichert ist, müssen sie ändern. Dies muss geschehen, bevor Sie irgendeine Erweiterung oder einen Skin laden.

alternativ kann das auch in einer Zeile konfiguriert werden:

Migration für Entwickler von Erweiterungen
Das Skript maintenance/convertExtensionToRegistration.php hilft Ihnen PHP Einsprungspunkte in eine JSON-Metadatendatei zu migrieren. Wenn ihre Erweiterung ältere Versionen von MediaWiki unterstützt, sollten Sie Ihren PHP-Einsprungspunkt FooBar/FooBar.php beibehalten solange die Unterstützung für die älteren Versionen bestehen bleibt.

Beispiel für Befehlszeilen :

Wenn der Fehler angezeigt wird, dass Konstanten oder Funktionen nicht neu definiert werden konnten, müssen Sie Ihre Erweiterung in LocalSettings.php deinstallieren (d.h. auskommentieren). Sie sollten Ihre PHP Einsprungpunkt-Datei (FooBar.php) mit einem Code wie folgendem ersetzen, damit Wikis während des Aktualisierungsprozesses nicht abbrechen. Wenn Sie Vor-1.25 Kompatibilität beibehalten wollen, entfernen Sie die die Zeile und belassen stattdessen die alte PHP-Konfiguration.

Oder Skins

Entwicklerdokumentation
PHP entry points usually have some documentation of configuration settings that is useful and shouldn't be lost. Unfortunately JSON doesn't support comments. It is recommended that you transfer configuration documentation to a README file in the extension's repository. You should also document configuration on-wiki in your Extension:MyExtension page. It is possible to include some documentation directly in the extension.json file as well. Extension registration ignores any key in extension.json starting with ' ' in the top-level structure or under, so you can put comments in those parts of the JSON file. For example:

Dies sollte nur für kurze Notizen und Kommentare verwendet werden.

Funktionen
Wenn Sie eine große Anzahl von Erweiterungen laden, bietet "extension registration" eine Leistungssteigerung, sofern Sie APC (or APCu) installiert haben. Erweiterungen, die zusammen mit  (mit Mehrzahl -s) geladen werden, werden zusammen zwischengespeichert.

Eigenschaften
Ein immer wieder auftretendes Problem ist, wie man etwas bei einer anderen Erweiterung "registriert". Normalerweise bedeutet dies, dass Sie eine Erweiterung vor einer anderen laden müssen. Zum Beispiel hat VisualEditor ein, das es Erweiterungen ermöglicht ihre Module hinzuzufügen. However, in VisualEditor's entry point it has:

Wenn eine Erweiterung das Array erweitert bevor VisualEditor geladen ist, wird VE beim Laden alle Einträge aus dem Array löschen. Einige Erweiterungen hingen von einer bestimmten Ladereihenfolge ab, andere hackten um diese mit herum. "Extension registration" löst dieses Problem mit "Eigenschaften". In der Erweiterung Math ist in ihrer extension.json</tt> etwa folgendes eingetragen:

Wenn VisualEditor auf dieses Attribut zugreifen möchte, ruft er folgende Funktion auf:

Anforderungen (Abhängigkeiten)
"Extension registration" hat einen  Abschnitt, der ähnlich wirkt wie der   Abschnitt beim "composer". Er erlaubt einem Erweiterungs-Entwickler mehrere Anforderungen für die Erweiterung, wie beispielsweise eine spezifische MediaWiki Version (oder größer / kleiner als) oder einer andere Erweiterung (noch nicht implementiert, siehe ) zu spezifizieren. Um zum Beispiel eine Abhängigkeit von einer Erweiterung auf eine MediaWiki-Version größer als 1.26.0 zu ergänzen, können Sie den folgenden Code in  einfügen:

Der Schlüssel des  Objekts ist der Name der Abhängigkeit ist (derzeit wird nur MediaWiki unterstützt), der Wert ist eine gültige Versions-Einschränkung (das Format muss einem der vom "composer" verwendeten entsprechen).

Überprüfen Sie, ob eine Erweiterung geladen wird, ohne dass sie tatsächlich benötigt wird
Viele Erweiterungen können Funktionen bieten, die nur funktionieren, wenn eine andere Erweiterung auch geladen wird, aber ohne dass sie diese Funktion wirklich benötigen um mit der Kern-Erweiterungsfunktion zu arbeiten. Als Beispiel: Wenn Erweiterung B geladen ist, kann Erweiterung A einen echten WYSIWYG-Editor zur Verfügung stellen, andernfalls wird nur eine einfache Text-Eingabe verwendet. Erweiterung A kann von der Extension B profitieren (wenn sie geladen wird), aber B ist nicht erforderlich damit A funktioniert. Dazu überprüfen Sie in der Regel, ob die Erweiterung geladen ist, anstatt sie als harte Abhängigkeit festzulegen.

Um eine standardisierte Möglichkeit der Überprüfung zu implementieren, ob eine Erweiterung geladen ist oder nicht (ohne die Notwendigkeit von Mehrarbeit in einer Erweiterung, die eine weiche Abhängigkeit von einer anderen ist), kann "extension registration" verwendet werden. Es implementiert ein  Methode, die ein einfaches boolean zurückgibt, wenn die Erweiterung geladen ist oder nicht (die Erweiterung muss mit der "extension registration" geladen werden, damit dies funktioniert). Beispiel:

Alternativ: Falls die Erweiterung B eine spezielle Konstante für diesen Zweck beim Laden definiert, ist es möglich zu überprüfen ob diese definiert ist:

Es ist eine unschöne Art und Weise, die vermieden werden sollte, zu überprüfen, ob eine bestimmte Klasse einer Erweiterung vorhanden ist oder nicht, z.B. mit diesem Code:

Dies könnte zum Abbruch führen, wenn die Erweiterung im Dateisystem vorhanden ist, jedoch nicht geladen ist, z.B. wenn der "composer" für das automatische Laden verwendet wurde. Wenn die Klasse umbenannt wurde oder nicht mehr besteht (zum Beispiel, weil sie nicht öffentlich gepackt ist), wird dies auch zum Abbruch führen.

Im Allgemeinen ist es bevorzugt, Code über Komponenten des "Composers" anstelle von Erweiterungen zu teilen. Wenn die Klassen einer Erweiterung nur existieren müssen, aber die Erweiterung weder konfiguriert noch geladen werden muss, um das gewünschte zu tun, ist das ein starker Indikator dafür, dass der Code in eine Composer-Komponente abgespalten werden sollte, zu der stattdessen eine Abhängigkeit bestehen sollte.

Konfigurationen (Ihre Erweiterung/Ekins Einstellungen)
Standardmäßig setzt extension.json voraus, dass Ihre Konfigurationseinstellungen mit einem "wg" Präfix beginnen. Wenn das nicht der Fall ist, können Sie das Präfix mit einem speziellen Schlüssel überschreiben:

That would use a prefix of "eg", and set the global variable  to true.

Anpassen der Registrierung
Sometimes extensions need to do non-standard things during registration, or are just very complex. You can specify a 'callback' key in your extension.json</tt> if you need to execute some PHP code. The value should be set to a valid PHP callable, for example:. will execute this callback after it processes the extension.json</tt> file.

The callback isn't a normal hook function, it runs in early initialization.

See for what sort of things may require custom registration.

Also composer.json
If an extension or skin has library dependencies, it may have a composer.json</tt> file as well, see Manual:Composer.json best practices. Some metadata fields in these files overlap (discussed in T89456), including
 * and
 * and

Siehe auch

 * Report bugs against the MediaWiki-Configuration project.
 * Old versions of Manual:Developing extensions#Setup (prior to May 2015) and describe the old approach of declaring extension information in PHP code and variables
 * Bekannte Einschränkungen
 * Überblick über die Architektur
 * docs/extension.schema.json</tt> ist das Schema für  (und skin.json). Es gibt ein Werkzeug, das diese Dokumentation erzeugt.
 * RfC zur Umsetzung der Registrierung von Erweiterungen