Příručka:Použití vlastních jmenných prostorů
Kromě vestavěných jmenných prostorů je možné do instalace MediaWiki přidat vlastní jmenné prostory, dále oddělit obsah a umožnit logičtější organizaci.
Vlastní jmenné prostory se snadno spravují pomocí konfigurační direktivy $wgExtraNamespaces
.
Je také možné definovat názvy aliasů pro vlastní (a také předdefinované) jmenné prostory pomocí konfigurační direktivy $wgNamespaceAliases
.
Některá rozšíření vám usnadňují vytváření vlastních jmenných prostorů.
Příklady zahrnují NamespaceManager a BlueSpiceNamespaceManager .
Vytvoření vlastního jmenného prostoru
Další jmenné prostory registrujete tak, že je přidáte do globální proměnné $wgExtraNamespaces
do souboru "LocalSettings.php" .
Všechny jmenné prostory vyžadují jedinečný číselný index v tomto poli.
Jako příklad jednoduchého vytvoření vlastního jmenného prostoru přidáním následujících řádků do souboru "LocalSettings.php" definujete jmenný prostor "Foo" 3000 a jemu přidružený jmenný prostor "Foo_talk".
Všimněte si, že mít jmenný prostor talk spojený s vaším vlastním jmenným prostorem je aktuálně pevným požadavkem.
// Definujte konstanty pro mé další jmenné prostory.
define("NS_FOO", 3000); // Toto MUSÍ být sudé číslo.
define("NS_FOO_TALK", 3001); // Toto MUSÍ být následující liché celé číslo.
// Přidejte jmenné prostory.
$wgExtraNamespaces[NS_FOO] = "Foo";
$wgExtraNamespaces[NS_FOO_TALK] = "Foo_talk"; // Poznamenejte si podtržítka v názvu oboru názvů.
- Vyberte nepoužité číslo
- Podle konvence jsou jmenné prostory číslované 100-199 vyhrazeny pro jmenné prostory specifické pro web, ačkoli existují některá rozšíření, která tuto konvenci nedodržují. Zapisovatelé rozšíření používají vyšší čísla, až 32767. Při výběru indexu byste se měli vyhnout jakémukoli číslu již v Výchozí jmenné prostory rozšíření , protože možná budete chtít toto rozšíření nainstalovat později. Čísla od 3000 do 4999 jsou vyhrazena pro systémové administrátory, aby mohli definovat své vlastní jmenné prostory. (Také se budete chtít vyhnout jakémukoli jmennému prostoru name, který se již nachází ve výchozích jmenných prostorech rozšíření.)
- I když je to divné
- Všimněte si, že index pole jmenného prostoru je ve výše uvedeném příkladu 3000.
- index jmenného prostoru even označuje předmětový jmenný prostor.
- index odd bezprostředně za tímto číslem označuje související jmenný prostor diskusní ("talk")
- Vytvořte také jmenný prostor talk
- Společně s každým vlastním jmenným prostorem obvykle vytváříte diskusní jmenný prostor "Talk". V tomto příkladu, pokud přesunete stránku do jmenného prostoru "Foo", budete vyzváni k přesunutí související diskusní stránky, pokud existuje, a pokud se tak rozhodnete, MediaWiki umístí diskusní stránku v "Foo talk".
- Bez mezer
- Při registraci jmen jmenných prostorů používejte místo mezer podtržítka. "My Namespace" (můj jmenný prostor) je zde neplatný. Místo toho použijte "My_Namespace".
- Bez pomlčky
Velká část nepovoluje pomlčky, ale přesto je lze bezpečně přidat k názvu předpony. Příklad:
$wgExtraNamespaces[NS_FOOFOO] = "Foo-Foo";
- Pojmenujte čísla, která vyberete
- Příklad definuje konstanty pro ID jmenného prostoru, abyste se na tyto jmenné prostory mohli později v konfiguraci odvolávat, například v
$wgNamespaceProtection
,$wgNamespacesWithSubpages
nebo$wgExtraGenderNamespaces
.
Můžete pokračovat v konfiguraci dalších nastavení pro váš nový jmenný prostor.
$wgNamespaceProtection[NS_FOO] = [ 'editfoo' ]; // oprávnění "editfoo" potřebné k úpravě jmenného prostoru foo
$wgNamespacesWithSubpages[NS_FOO] = true; // podstránky povolené pro jmenný prostor foo
$wgGroupPermissions['sysop']['editfoo'] = true; // oprávnění "editfoo" udělené uživatelům ve skupině "sysop".
- Udělejte brzy
- Manipulace s
$wgExtraNamespaces
musí být dokončena během inicializace MediaWiki, tj. v případě, že rozšíření atd. by mělo fungovat s nově vytvořeným vlastním jmenným prostorem, ujistěte se, že jste je definovali a pojmenovali před vyvoláním příslušného rozšíření. Například s ním nelze manipulovat v post-inicializačním háčku jako$wgExtensionFunctions
.
- Dejte si pozor na kolize s protokoly URL
- Propojovací kód MediaWiki ví o řadě URL protokolů definovaných v proměnné $wgUrlProtocols . Pokud je název vašeho jmenného prostoru identický s jedním z těchto protokolů, budete mít potíže s vytvořením [[wikilinks]] na stránky ve vašem vlastním jmenném prostoru. Nejčastěji k tomu dochází, když se někdo pokouší vytvořit jmenný prostor "News", protože
news:
je protokol URL pro diskusní skupiny NNTP. - Chcete-li se tomuto problému vyhnout, můžete zrušit registraci příslušného protokolu adresy URL přidáním následujícího kódu do souboru "LocalSettings.php" (
news
nahraďte názvem protokolu, který chcete odstranit) malými písmeny:
$wgUrlProtocols = array_diff( $wgUrlProtocols, array( 'news:' ) );
V rozšířeních
Verze MediaWiki: | ≥ 1.25 Gerrit change 166705 |
Rozšíření často přidávají své vlastní jmenné prostory, jako je jmenný prostor "Topic" rozšíření Flow .
Registrační systém extension.json má klíč namespaces
pro rozšíření pro výpis jmenných prostorů.
Z rozšíření Gadgets :
"namespaces": [
{
"id": 2300,
"constant": "NS_GADGET",
"name": "Gadget",
"protection": "gadgets-edit"
},
{
"id": 2301,
"constant": "NS_GADGET_TALK",
"name": "Gadget_talk"
},
]
Můžete zde také provést další nastavení související s jmenným prostorem, například zda by to měl být jmenný prostor obsahu nebo ne. Více o dostupných vlastnostech najdete na stránce Příručka:Extension.json/Schéma .
Pokud je registrace jmenného prostoru podmíněná (například EventLogging definuje pouze svůj jmenný prostor "Schema" na wiki, kde ukládá schémata), rozšíření by mělo přidat "conditional": true
k definici jmenného prostoru v extension.json
a také tam zaregistrovat handler pro háček CanonicalNamespaces , který rozhodne, zda se jmenný prostor zaregistruje nebo ne.
Obslužný program háčku by měl změnit pouze $namespaces
, se kterým je volán. Všechna ostatní nastavení jmenného prostoru by měla být stále registrována v extension.json
.
Pokud by tato nastavení měla být také dynamická, neměňte $wgContentNamespaces
, $wgNamespaceContentModels
atd. v obslužném programu háčku CanonicalNamespaces (nebude to mít žádný vliv – T288819). Místo toho je budete muset nastavit dříve, například ve zpětném volání (ne v $wgExtensionFunctions
).
Všimněte si, že přidání rozšíření do LocalSettings.php nemusí nutně zpřístupnit příslušné konstanty jmenného prostoru jako globální pro jiná rozšíření.
Jmenné prostory obsahu
Při vytváření stránky statistik webu (viz Special:Statistics) používá MediaWiki hodnoty uložené v databázi k výpočtu určitých součtů. Jedním konkrétním součtem je údaj "počet článků" nebo "počet stránek s obsahem".
Aby byla stránka považována za článek nebo správný obsah, musí:
- Být v hlavním jmenném prostoru nebo definovaném jmenném prostoru obsahu
- Nesmí být stránka přesměrování
- Obsahuje alespoň jeden interní odkaz, jak je nakonfigurován
$wgArticleCountMethod
.
Při vytváření vlastních jmenných prostorů pro uložení dalšího obsahu je dobré to uvést v konfiguraci. To se provádí pomocí konfigurační direktivy $wgContentNamespaces .
Pro rozšíření výše uvedeného příkladu lze do souboru "LocalSettings.php" přidat následující:
$wgContentNamespaces[] = 3000;
- nebo
$wgContentNamespaces[] = NS_FOO;
MediaWiki nyní bude považovat stránky ve jmenném prostoru "Foo" za články, pokud splňují zbývající kritéria, a zahrne je při aktualizaci počítadel statistik webu.
Spuštění skriptů údržby
Při úpravě hodnoty konfiguračního parametru $wgContentNamespaces
je dobré spustit buď skript "path/to/maintenance/updateArticleCount.php nebo "path/to/maintenance/initSiteStats.php", aby se aktualizovala interní mezipaměť statistik (viz PříručkaːÚdržbářské skripty ).
Proč byste chtěli vlastní jmenný prostor
Existuje několik důvodů, proč byste to mohli chtít:
- Vlastní jmenný prostor lze použít k uložení obsahu, který by se neměl zobrazovat na stránce s výsledky vyhledávání, například stránky, které se používají pouze pro překlad.
- Některé jmenné prostory vyžadují další oprávnění pro úpravy.
- Chcete, aby určité jmenné prostory nepodléhaly určitým omezením nebo výchozím nastavením (například $wgNoFollowNsExceptions )
- Jednotná předpona pro konkrétní obsah(y), kterou lze prohledávat pouze pro daný jmenný prostor
- Pokud jste vývojář MW, někdy potřebujete mít vlastní jmenný prostor pro svá rozšíření
Jednání se stávajícími stránkami
Při ukládání záznamů stránek používá MediaWiki číselný index jmenného prostoru spolu se zbývajícím textem názvu. Když je tedy stránka vytvořena ve jmenném prostoru, který neexistuje, např. "Bar:Nějaká stránka", je považována za umístěnou v hlavním jmenném prostoru.
To může způsobit problémy, pokud později přidáte vlastní definici jmenného prostoru pro "Bar", protože MediaWiki bude hledat stránku indexovanou přes správný jmenný prostor, ale nebude ji moci najít, takže obsah bude nepřístupný.
K odstranění tohoto problému můžete použít skript údržby NamespaceDupes . Najde stránky v hlavním jmenném prostoru s předponou odpovídající libovolnému z definovaných jmenných prostorů a aktualizuje jejich záznamy.
Pokud nejste schopni spouštět skripty údržby, může být vhodný následující postup:
- Zakomentujte definici jmenného prostoru v konfiguračním souboru
- Vstupte na každou dotčenou stránku (použijte Special:PrefixIndex na vaší wiki k jejímu nalezení) a přesuňte ji z pseudo-namespace, např. přesunout "Bar:Some page" do "Bar2:Some page"
- Okomentujte definici jmenného prostoru
- Přesuňte dotčené stránky zpět do nového jmenného prostoru
Odebírání vlastních jmenných prostorů
K výše uvedenému problému dochází také při odebrání vlastní definice jmenného prostoru. MediaWiki si již není vědoma číselného indexu jmenného prostoru a pokouší se v hlavním jmenném prostoru vyhledávat požadované stránky, což vede k nepřístupnému obsahu. Toto je vzácný výskyt, protože většina webů nebude potřebovat jmenné prostory removed (odstraněny), ale je to problém.
Verze MediaWiki: | ≥ 1.43 Gerrit change 1052196 |
K nápravě tohoto problému můžete použít skript údržby CleanupTitles . Najde stránky jakýkoli jmenný prostor, který již není definován, a aktualizuje jejich záznamy. Stránky budou přesunuty do hlavního jmenného prostoru s přidanou předponou jako NS123:, pokud není specifikováno parametry skriptu jinak.
Stejně jako výše můžete také dočasně obnovit konfiguraci jmenného prostoru a přesunout stránky z uživatelského rozhraní (nebo je odstranit).
Přejmenování vlastních jmenných prostorů
Předpokládejme, že potřebujete přejmenovat vlastní jmenný prostor "Foo" na "New" bez provedení hromadného přesunu stránek.
Nejjednodušší způsob, jak toho dosáhnout, je zachovat ID jmenného prostoru (zde "3000
") i konstantu jmenného prostoru (zde "NS_FOO
"), upravit (viditelné) název jmenného prostoru a přidejte starý jako alias.
změnit
define("NS_FOO", 3000);
$wgExtraNamespaces[NS_FOO] = "Foo";
na
define("NS_FOO", 3000);
$wgExtraNamespaces[NS_FOO] = "New";
$wgNamespaceAliases['Foo'] = NS_FOO;
Všimněte si, že některá rozšíření ukládají názvy jmenných prostorů v prostém textu místo svých interních ID, a proto je třeba s nimi zacházet se zvýšenou opatrností. Příklady zahrnují:
- Rozšíření Translate vytváří stránky s názvem zdrojové stránky (obsahující předponu jmenného prostoru) ve jmenném prostoru Překlady, např. Translations:Manual:Using custom namespaces/117/es za španělský překlad 117. zprávy na této stránce. Když změníte název jmenného prostoru, přeložitelné stránky by měly být zpracovány, jako by byly přesunuty .
Vyhněte se konfliktům jmenných prostorů
Abyste se vyhnuli konfliktům jmenného prostoru, např. váš jmenný prostor má stejné číslo jako jmenný prostor definovaný příponou, seznam jmenný prostor rozšíření vám ukazuje, kterým číslům se vyhnout, abyste předešli konfliktům.
Definování $wgNamespacesToBeSearchedDefault , $wgNamespacesWithSubpages , $wgContentNamespaces nebo $wgNamespaceAliases pro ID, které není přidruženo k žádnému existujícímu jmennému prostoru v $wgExtraNamespaces, nenaruší wiki. MediaWiki takové konfigurace elegantně ignoruje.
Stylování jmenných prostorů
Chcete-li například nastavit barvu pozadí stránek v konkrétním jmenném prostoru (a s ním souvisejícím jmenném prostoru talk), můžete do svého common.css přidat následující kód:
.ns-3000 #content, .ns-3001 #content { background-color: #f3f3ff; }
.ns-3000 div.thumb, .ns-3001 div.thumb { border-color: #f3f3ff; }
kde 3000
je index jmenného prostoru a #f3f3ff
je barva, kterou chcete použít jako barvu pozadí.
Můžete také chtít změnit výchozí název karty (název oboru názvů). Toto se nachází ve vašich systémových zprávách na MediaWiki:nstab-namespace.
Související odkazy
- Příručka:Jmenný prostor
- Namespace manager - jak bylo původně navrženo pro MW1.6-wikidata a jeho nástupce. V současné době používá projekt OmegaWiki.
Správa stránek
Rozšíření
- Kategorie:Rozšíření jmenného prostoru
- Extension:NamespaceManager – pro správu jmenných prostorů
- Extension:BlueSpiceNamespaceManager – umožňuje vytvářet vlastní jmenné prostory
- Extension:SpecialNamespaces – upravená verze Extension:Interwiki , která ji mění tak, aby poskytovala správce jmenného prostoru jako speciální stránku.
- Extension:Lockdown – pro řízení přístupu k jmenným prostorům
Pro vývojáře rozšíření
- Extension namespace registration - seznam vlastních jmenných prostorů registrovaných podle rozšíření. Pokud definujete konstantu pro vlastní jmenný prostor, uveďte ji zde také.