Zusätzlich zu den eingebautenNamensrä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 erstellenBeispiele enthaltenNamespaceManager undBlueSpiceNamespaceManager.
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.
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";
$wgNamespaceProtection,$wgNamespacesWithSubpages oder$wgExtraGenderNamespacesWeiter 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
$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.news: ist ein URL-Protokoll für NNTP-Newsgroups.news durch den kleingeschriebenen Namen des Protokolls, das man entfernen möchte):$wgUrlProtocols=array_diff($wgUrlProtocols,array('news:'));
| MediaWiki Version: | ≥ 1.25 Gerrit change 166705 |
Erweiterungen fügen oft ihre eigenen Namensräume hinzu, wie z.B. der "Topic"-Namensraum derFlow-Erweiterung.Das Registrierungssystemextension.json verfügt über einen Schlüsselnamespaces, mit dem eine Erweiterung ihre Namensräume auflisten kann, die immer existieren sollten.Aus derGadgets-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; seeHandbuch:extenstion.json/Schema for the available properties.
If namespace registration is conditional (for exampleEventLogging only defines its "Schema" namespace on the wiki where it stores schemas), the extension should add"conditional": true to the namespace definition inextension.json, and also register a handler for theCanonicalNamespaces 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 theextension.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 acallback (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.
Wenn die Seite für die Website-Statistiken (sieheSpecial: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;
$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.
$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 (sieheHandbuch:Wartungsskripte).Es gibt mehrere Gründe, weshalb ein solches Vorgehen sinnvoll sein könnte:
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.
You can use theNamespaceDupes maintenance script to correct this problem.It will find pages in the main namespace with a prefix matching any of the defined namespaces, and update their records.
If you are not able to run maintenance scripts, then the following approach might be suitable:
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äumeentfernen müssen, aber es ist ein Problem.
| MediaWiki Version: | ≥ 1.43 Gerrit change 1052196 |
You can use theCleanupTitles maintenance script to correct this problem.It will find pages any namespace that is no longer defined, and update their records.The pages will be moved to the main namespace with an added prefix likeNS123:, unless specified otherwise by parameters to the script.
As above, you can also temporarily restore the namespace configuration and move the pages from the user interface (or delete them).
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;
Note that some extensions store namespace names in plain text instead of their internal IDs, and should therefore be dealt with extra care.Examples include:
Um Namensraum-Konflikte zu vermeiden, z.B. wenn der eigene Namensraum die gleiche Nummer hat wie ein Namensraum, der durch eineErweiterung definiert ist, zeigt die ListeErweiterungs-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.
Um beispielsweise die Hintergrundfarbe von Seiten in einem bestimmten Namespace (und dem dazugehörigen Talk-Namespace) festzulegen, kann folgender Code zucommon.css hinzugefügt werden:
.ns-3000#content,.ns-3001#content{background-color:#f3f3ff;}.ns-3000div.thumb,.ns-3001div.thumb{border-color:#f3f3ff;}
wobei3000 der Index des Namespaces und#f3f3ff die gewünschte Hintergrundfarbe ist.However, unless your needs are very basic you will probably want to support night mode as it is expected by modern standards, and avoid accessibility problems derived from using fixed colors.SeeEmpfehlungen für Dunkelmodus-Kompatibilität auf Wikimedia-Wikis for details.
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.