Handbuch:Verwendung von benutzerdefinierten Namensräumen
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 .
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. (Ebenfalls 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.
- ein gerader Namensraum Index ist für Themen Namensraum bestimmt.
- ein ungerader Index folgt unmittelbar darauf und bestimmt den Diskussion ("talk") Namensraum
- 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ühzeitig
- 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, dennnews:
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
MediaWiki Version: | ≥ 1.25 Gerrit change 166705 |
Erweiterungen fügen oft ihre eigenen Namensräume hinzu, wie z.B. der "Topic"-Namensraum der Flow -Erweiterung.
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"
},
]
You can also set other namespace-related settings here, such as whether it should be a content namespace or not; see Handbuch:extenstion.json/Schema for the available properties.
If namespace registration is conditional (for example EventLogging only defines its "Schema" namespace on the wiki where it stores schemas), the extension should add "conditional": true
to the namespace definition in extension.json
, and also register a handler for the CanonicalNamespaces hook there which decides whether to register the namespace or not.
The hook handler should only change the $namespaces
with which it is called; all other settings of the namespace should still be registered in the extension.json
.
If those settings should also be dynamic, do not change $wgContentNamespaces
, $wgNamespaceContentModels
etc. in the CanonicalNamespaces hook handler (it will have no effect – T288819); instead, you will have to set them earlier, such as in a callback (not in $wgExtensionFunctions
).
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:
- sich im Hauptnamensraum oder einem definierten Inhaltsnamensraum befinden.
- keine Weiterleitung-Seite sein
- Mindestens einen internen Link, wie konfiguriert, enthalten
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:
- Die Namensraum-Definition in der Konfigurationsdatei auskommentieren
- Jede betroffene Seite aufrufen und aus dem Pseudo-Namensraum verschieben, z. B. „Bar:Beliebige Seite“ nach „Bar2:Beliebige Seite“ verschieben
- Aufhebung der Kommentierung der Namensraum-Definition
- 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
- Handbuch:Namensraum
- Namespace manager - wie ursprünglich für MW1.6-wikidata und seine Nachfolger vorgeschlagen. Wird aktuell vom OmegaWiki-Projekt genutzt.
Site-Administration
Erweiterungen
- Kategorie:Namensraum-Erweiterungen
- Extension:NamespaceManager - zur Verwaltung von Namensräumen
- Extension:BlueSpiceNamespaceManager - erlaubt die Erstellung benutzerdefinierter Namensräume
- Extension:SpecialNamespaces - eine modifizierte Version der Erweiterung:Interwiki , die einen Namespace-Manager als Spezialseite bereitstellt.
- Extension:Lockdown - um den Zugriff auf Namensräume zu kontrollieren
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.