Handbuch:Verwendung von benutzerdefinierten Namensräumen

This page is a translated version of the page Manual:Using custom namespaces and the translation is 100% complete.

Zusätzlich zu den eingebauten Namensräumen ist es möglich, benutzerdefinierte Namensräume zu einer MediaWiki-Installation hinzuzufügen, um Inhalte weiter zu trennen und eine logischere Organisation zu ermöglichen.

Benutzerdefinierte Namensräume sind mit der Konfigurationsrichtlinie $wgExtraNamespaces einfach zu verwalten. Es ist auch möglich, Aliasnamen für benutzerdefinierte (und auch vordefinierte) Namensräume zu definieren, indem man die Konfigurationsdirektive $wgNamespaceAliases verwendet. Eingige Erweiterungen machen es Dir leicht benutzerspezifischen Namensräume zu erstellen Beispiele enthalten NamespaceManager und BlueSpiceNamespaceManager .

Es wird empfohlen, vor der Bearbeitung von Namensräumen sicherzustellen, dass keine Aufträge in der job queue anstehen, um zu vermeiden, dass solche Aufträge fehlschlagen, wenn sie auf Seiten von Namensräumen abzielen, die Sie gerade löschen oder umbenennen wollen. Verwenden Sie runJobs.php , um alle anstehenden Aufträge auszuführen und die Warteschlange zu leeren, bevor Sie die Namensraum-Konfiguration ändern.

Einen benutzerdefinierten Namensraum erstellen

Sie registrieren zusätzliche Namensräume, indem Sie sie der globalen Variable $wgExtraNamespaces in Ihrer Datei "LocalSettings.php" hinzufügen. Alle Namensräume benötigen einen eindeutigen numerischen Index in diesem Array. Als ein Beispiel einer einfachen Erstellung eines benutzerspezifischen Namensraums, füge folgende Zeilen in die "LocalSettings.php" Datei, die "Foo" als Namensraum 3000 definiert und den zugehörigen Namensraum "Foo_talk". Beachte bitte, dass ein Talk-Namensraum, der mit deinem benutzerdefinierten Namensraum verbunden ist, derzeit eine "feste" Anforderung ist.

// Definiert Konstanten für einen zusätzlichen Namensraum.
define("NS_FOO", 3000); // Diese Zahl MUSS gerade sein.
define("NS_FOO_TALK", 3001); // Dies MUSS die darauffolgende Ganzzahl sein.

// Füge Namensräume hinzu.
$wgExtraNamespaces[NS_FOO] = "Foo";
$wgExtraNamespaces[NS_FOO_TALK] = "Foo_talk"; // Beachte die Unterstriche in den Namen der Namensräume.
Wähle eine unbenutzte Nummer
Als Grundsatz gilt, dass die Zahlen der Namensräume 100-199 für seitenspezifische namensräume reserviert sind, obwohl einige Erweiterungen diesem Grundsatz nicht entsprechen. Ersteller von Erweiterungen nutzen höhere Zahlen bis 32767. Wenn Du einen Index wählst, solltest Du jede Zahl vermeiden, die in extension default namespaces genannt wird, da Du die Erweiterung eventuell später installieren möchtest. Die Zahlen von 3000 bis 4999 sind den System-Administratoren vorbehalten, um benutzerspezifischen Namensräume zu erstellen. (Ebendfalls solltest Du jeden Namensraum mit name vermeiden der bereits in Extension default namespaces (Festgelegte Namensräume von Erweiterungen) ist.)
Gerade vor Ungerade
Beachte der oben genannte Zahlenbereich 3000 für den Namensraum ist ein Beispiel.
Erstelle den Diskussions-Namensraum ebenfalls.
Normalerweise erstellt Du einen Diskussions "Talk" namensraum zusammen mit einem benutzerspezifischen Namensraum. Mit diesem Beispiel, wenn Du eine Seite verschiebst in den Namensraum "Foo", wird angezeigt auch die verbundene Diskussions-Seite mit zu verschieben (wenn es eine gibt) und wenn Du dich dafür entscheidest, wird MediaWiki diese Diskussions-Seite in "Foo talk" setzen.
Keine Leerzeichen
Verwende Unterstriche anstatt von Leerzeichen für Benennungen von Namensräumen. 'My Namespace' ist hier unzulässig; verwende stattdessen 'My_Namespace'.
Keine Bindestriche

Der großgeschriebene Teil erlaubt keine Bindestriche, aber sie können sicher zu den Prefix-Titeln ergänzt werden. Beispiel:

$wgExtraNamespaces[NS_FOOFOO] = "Foo-Foo";
Gib den gewählten Nummern einen Namen
Das Beispiel definiert Konstanten für die Namensraum IDs, sodass Du später auf die Namensräume Deiner Konfiguration verweisen kannst, wie z.B. in $wgNamespaceProtection , $wgNamespacesWithSubpages oder $wgExtraGenderNamespaces

Weiter kannst Du zusätzliche Einstellungen für Deinen neuen Namensraum konfigurieren.

$wgNamespaceProtection[NS_FOO] = [ 'editfoo' ]; // Berechtigung "editfoo" um den Namensraum foo zu bearbeiten
$wgNamespacesWithSubpages[NS_FOO] = true;            // Unterseiten für den Namensbereich foo erlauben
$wgGroupPermissions['sysop']['editfoo'] = true;      // Berechtigung "editfoo" für die Benutzer der Gruppe "sysop" erteilen
Tue es frühzeitg
Veränderungen an $wgExtraNamespaces müssen durchgeführt sein während der MediaWiki Initialisierung, z.B. für den Fall, dass eine Erweiterung usw. mit dieser neu erstellen benutzerspezifischem Namensraum funktionieren soll. Stelle sicher, dass du diese zuvor definiert und benannt hast, bevor du die entsprechende Erweiterung aufrufst. Beispielsweise kann dies nicht in einem post-initialisierten Hook wie $wgExtensionFunctions verändert werden.
Achten Sie auf Kollisionen mit URL-Protokollen
Der Verlinkungscode von MediaWiki kennt eine Reihe von URL-Protokollen, die in der Variable $wgUrlProtocols definiert sind. Wenn Deine Namensraumbenennung identisch zu einem aus dem Protokoll ist, wirst Du Störungen im [[wikilinks]] auf den Seiten Deinen benutzerspezifischen Seiteen erzeugen. Dies tritt üblicherweise auf, falls jemand versucht den Namensraum "News" zu erstellen, denn news: ist ein URL-Protokoll für NNTP-Newsgroups.
Um dies zu vermeiden, setzt man das entsprechende URL-Protokoll außer Kraft, in dem man folgenden Code in die "LocalSettings.php"-Datei einfügt (man ersetzt news durch den kleingeschriebenen Namen des Protokolls, das man entfernen möchte):
$wgUrlProtocols = array_diff( $wgUrlProtocols, array( 'news:' ) );

In Erweiterungen

Erweiterungen fügen oft ihre eigenen Namensräume hinzu, wie z.B. der "Topic"-Namensraum der Flow -Erweiterung. Eine Erweiterung kann bedingungslos zu $wgExtraNamespaces hinzufügen, wie oben beschrieben, oder wenn ihre Namensraumregistrierung bedingt ist (zum Beispiel definiert EventLogging nur seinen "Schema"-Namensraum im Wiki, wo es Schemas speichert), dann kann sie eine Handler-Funktion für den CanonicalNamespaces -Hook hinzufügen, die entscheidet, was zu tun ist.

Die zeitliche Abstimmung der Registrierung von Erweiterungen ist subtil. Funktionen, die Erweiterungen mit $wgExtensionFunctions registrieren, werden zu spät ausgeführt, um zusätzliche Namensräume zu registrieren (task T47031). Daher sollten Erweiterungen den CanonicalNamespaces auf Dateiebene (in MyExtension.php) binden und dort überprüfen, ob das Wiki den zusätzlichen Namensraum aktivieren sollte oder nicht. Erweiterungen können Namensraum-Berechtigungen und Inhalts-Handler bedingungslos auf Dateiebene konfigurieren, da sie nicht erfordern, dass der Namensraumtatsächlich erstellt wird.

MediaWiki Version:
1.25
Gerrit change 166705

Das Registrierungssystem extension.json verfügt über einen Schlüssel namespaces, mit dem eine Erweiterung ihre Namensräume auflisten kann, die immer existieren sollten. Aus der Gadgets -Erweiterung:

"namespaces": [
		{
			"id": 2300,
			"constant": "NS_GADGET",
			"name": "Gadget",
			"protection": "gadgets-edit"
		},
		{
			"id": 2301,
			"constant": "NS_GADGET_TALK",
			"name": "Gadget_talk"
		},
]

Es unterstützt auch den Hook CanonicalNamespaces. Erweiterungen sollten die Erweiterungsregistrierung gegenüber CanonicalNamespaces bevorzugen. Beachten Sie, dass das Hinzufügen einer Erweiterung zu LocalSettings.php nicht unbedingt dazu führt, dass relevante Namensraumkonstanten als globale Variablen für andere Erweiterungen verfügbar sind.

Inhaltsnamensräume

Wenn die Seite für die Website-Statistiken (siehe Special:Statistics) erstellt wird, verwendet MediaWiki Werte, die in der Datenbank gespeichert sind, um bestimmte Gesamtzahlen zu berechnen. Eine bestimmte Gesamtzahl ist die Anzahl der Artikel oder die Anzahl der Inhaltsseiten.

Damit eine Seite als Artikel oder richtiger Inhalt betrachtet wird, muss sie:

Wenn Sie benutzerdefinierte Namensräume erstellen, um zusätzliche Inhalte aufzunehmen, sollten sie in der Konfiguration angegeben werden. Das macht man über die Konfigurationsrichtlinie $wgContentNamespaces .

Um das obige Beispiel zu ergänzen, könnte man der Datei "LocalSettings.php" folgendes hinzufügen:

$wgContentNamespaces[] = 3000;
oder
$wgContentNamespaces[] = NS_FOO;

MediaWiki betrachtet nun Seiten im „Foo“-Namensraum als Artikel, wenn sie die übrigen Kriterien erfüllen, und berücksichtigt sie bei der Aktualisierung der Site-Statistiken.

Wartungsskripte ausführen

  • Wenn der Wert des Konfigurationsparameters $wgContentNamespaces angepasst wird, ist es ratsam, entweder das Skript "path/to/maintenance/updateArticleCount.php oder "path/to/maintenance/initSiteStats.php" auszuführen, um den internen Statistik-Cache zu aktualisieren (siehe Handbuch:Wartungsskripte ).

Warum braucht man einen benutzerdefinierten Namensraum

Es gibt mehrere Gründe, weshalb ein solches Vorgehen sinnvoll sein könnte:

  • Ein benutzerdefinierter Namensraum kann verwendet werden, um Inhalte zu speichern, die nicht auf der Suchergebnisseite angezeigt werden sollen, z. B. Seiten, die nur für die Transklusion verwendet werden.
  • Bestimmte Namensräume erfordern zusätzliche Berechtigungen für das Bearbeiten.
  • Bestimmte Namensräume sollen nicht gewissen Einschränkungen oder Standardeinstellungen unterworfen werden (z.B. $wgNoFollowNsExceptions )
  • Ein einheitliches Präfix für bestimmte Inhalte, das nur für diesen Namensraum durchsucht werden kann
  • Wenn Sie ein MW-Entwickler sind, benötigen Sie manchmal einen eigenen Namensraum für Ihre Erweiterung(en)

Arbeiten mit bestehenden Seiten

Beim Speichern von Seitendatensätzen verwendet MediaWiki den numerischen Index eines Namensraums zusammen mit dem restlichen Titeltext. Wenn also eine Seite in einem Namensraum erstellt wird, der nicht existiert, z. B. „Bar:Beliebige Seite“, wird sie als im Hauptnamensraum liegend behandelt.

Dies kann zu Problemen führen, wenn zu einem späteren Zeitpunkt eine benutzerdefinierte Namensraum-Definition für „Bar“ hinzugefügt wird, da MediaWiki nach einer Seite sucht, die über den richtigen Namensraum indiziert ist, diese aber nicht finden kann, wodurch der Inhalt unzugänglich wird.

Um dieses Problem zu lösen, gibt es im Wesentlichen drei Lösungsansätze.

Konfliktseiten verschieben

Wenn die Anzahl der betroffenen Seiten gering ist (z.B. „Bar“ enthielt fünf Seiten, die erstellt wurden, bevor der Namensraum in der Site-Konfiguration definiert wurde), dann könnte der folgende Weg geeignet sein:

  1. Die Namensraum-Definition in der Konfigurationsdatei auskommentieren
  2. Jede betroffene Seite aufrufen und aus dem Pseudo-Namensraum verschieben, z. B. „Bar:Beliebige Seite“ nach „Bar2:Beliebige Seite“ verschieben
  3. Aufhebung der Kommentierung der Namensraum-Definition
  4. Verschieben der betroffenen Seiten in den neuen Namensraum

Ein Wartungsskript verwenden

Im Verzeichnis maintenance gibt es ein Wartungsskript, das die obige Operation für eine große Anzahl von Seiten effektiver durchführt: NamespaceDupes.php Es ist einfach zu benutzen, aber wie bei allen MediaWiki-Wartungsskripten sollten Sie zuerst die verfügbaren Benutzerinformationen studieren (verwenden Sie --help als Option).

Verwenden einer Datenbankabfrage

Um alle Seiten „Bar:Beliebige Seite“ in den Namensraum 3000 zu verschieben, machen Sie die folgende Datenbankabfrage:

UPDATE page SET
page_title = REPLACE(page_title, 'Bar:', ''),
page_namespace = 3000
WHERE page_title LIKE 'Bar:%' AND page_namespace=0

Um Diskussionsseiten zu bearbeiten:

UPDATE page SET
page_title = REPLACE(page_title, 'Bar_talk:', ''),
page_namespace = 3001
WHERE page_title LIKE 'Bar_talk:%' AND page_namespace=1

Nach solchen Eingriffen sollte das Skript refreshLinks.php und das Skript updateSearchIndex.php ausgeführt werden, um interne Links und Suchergebnisse im Wiki zu aktualisieren. Bitte beachten Sie, dass externe Suchmaschinen wie Google einige Zeit brauchen, um den Index zu aktualisieren.

Entfernen benutzerdefinierter Namensräume

Das oben angesprochene Problem tritt auch auf, wenn eine benutzerdefinierte Namensraum-Definition entfernt wird; MediaWiki kennt den numerischen Index für den Namensraum nicht mehr und versucht, den Hauptnamensraum nach den gewünschten Seiten zu durchsuchen, was zu unzugänglichen Inhalten führt. Das kommt zwar selten vor, da die meisten Websites keine Namensräume entfernen müssen, aber es ist ein Problem. (Siehe mailing list discussion).

Beispiel, wie man Flow und den Thema-Namensraum entfernt:

  • Deinstalliere Flow
  • Füge temporär $wgExtraNamespaces[2600] = 'Topic'; in der Konfiguration hinzu
  • Benutze deleteBatch.php um alle Seiten im Thema-Namensraum zu löschen
  • Entferne die $wgExtraNamespaces-Einstellung

Umbenennen benutzerdefinierter Namensräume

Angenommen, man möchte den benutzerdefinierten Namensraum „Foo“ in „New“ umbenennen, ohne eine Massenverschiebung von Seiten durchzuführen. Der einfachste Weg, besteht darin, die Namensraum-ID (hier "3000") sowie die Namensraumkonstante (hier "NS_FOO") beizubehalten, den (sichtbaren) Namensraumtitel zu ändern und den alten als Alias hinzuzufügen.

ändere

define("NS_FOO", 3000);
$wgExtraNamespaces[NS_FOO] = "Foo";

zu

define("NS_FOO", 3000);
$wgExtraNamespaces[NS_FOO] = "New";
$wgNamespaceAliases['Foo'] = NS_FOO;

Namensraumkonflikte vermeiden

Um Namensraum-Konflikte zu vermeiden, z.B. wenn der eigene Namensraum die gleiche Nummer hat wie ein Namensraum, der durch eine Erweiterung definiert ist, zeigt die Liste Erweiterungs-Namensraum, welche Nummern zu vermeiden sind, um Kollisionen zu vermeiden.

Die Definition von $wgNamespacesToBeSearchedDefault , $wgNamespacesWithSubpages , $wgContentNamespaces oder $wgNamespaceAliases für eine ID, die mit keinem existierenden Namensraum in $wgExtraNamespaces verknüpft ist, macht das Wiki nicht kaputt; MediaWiki ignoriert solche Konfigurationen gnädig.

Namensräume gestalten

Um beispielsweise die Hintergrundfarbe von Seiten in einem bestimmten Namespace (und dem dazugehörigen Talk-Namespace) festzulegen, kann folgender Code zu common.css hinzugefügt werden:

.ns-3000 #content, .ns-3001 #content { background-color: #f3f3ff; }
.ns-3000 div.thumb, .ns-3001 div.thumb { border-color: #f3f3ff; }

wobei 3000 der Index des Namespaces und #f3f3ff die gewünschte Hintergrundfarbe ist.

Möglicherweise möchte man auch den Namen des Reiters gegenüber dem Standardnamen (dem Namen des Namensraums) ändern. Dieser befindet sich in Ihren Systemmeldungen unter MediaWiki:nstab-namespace.

Siehe auch

Site-Administration

Erweiterungen

Für Entwickler von Erweiterungen

  • Extension namespace registration - Liste der benutzerdefinierten Namensräume, die von Erweiterungen registriert wurden. Wenn eine Konstante für einen benutzerdefinierten Namensraum definiert wird, ist sie hier ebenfalls einzutragen.