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ženews:
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á pro rozšíření klíč namespaces
, který uvádí jejich jmenné prostory, které by měly vždy existovat.
Z rozšíření Gadgets :
"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 Příručka:extension.json/Schéma 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
).
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ý.
Chcete-li tento problém vyřešit, existují tři hlavní přístupy.
Přesunutí konfliktní stránky
Pokud je počet ovlivněných stránek malý (např. "Bar" obsahuje pět stránek vytvořených před definováním jmenného prostoru v konfiguraci webu), může být vhodný následující přístup:
- Zakomentujte definici jmenného prostoru v konfiguračním souboru
- Přistupte ke každé dotčené stránce a přesuňte ji z pseudo-namespace, např. přesunout "Bar:Some page" do "Bar2:Some page"
- Odkomentujte definici jmenného prostoru
- Přesuňte dotčené stránky zpět do nového jmenného prostoru
Použití skriptu údržby
V adresáři maintenance je skript údržby, který provádí výše uvedené operace efektivněji pro velký počet stránek; NamespaceDupes.php
Použití je jednoduché, ale stejně jako u všech skriptů pro údržbu MediaWiki si nejprve prostudujte dostupné informace o použití (volitelně použijte --help
).
Použijtí databázového dotazu
Chcete-li přesunout všechny stránky "Bar:Some page" do jmenného prostoru 3000, proveďte následující databázový dotaz:
UPDATE page SET
page_title = REPLACE(page_title, 'Bar:', ''),
page_namespace = 3000
WHERE page_title LIKE 'Bar:%' AND page_namespace=0
Pro práci s diskusními stránkami:
UPDATE page SET
page_title = REPLACE(page_title, 'Bar_talk:', ''),
page_namespace = 3001
WHERE page_title LIKE 'Bar_talk:%' AND page_namespace=1
Po takové zábavě spusťte skript refreshLinks.php a skript updateSearchIndex.php pro aktualizaci interních odkazů a výsledků vyhledávání ve vaší wiki. Upozorňujeme, že externím vyhledávačům, jako je Google, bude nějakou dobu trvat, než aktualizují svůj index.
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. (Viz diskuse o mailing listu).
Příklad, jak odstranit Flow a jmenný prostor Topic:
- Odinstalujte Flow
- Dočasně přidejte do konfigurace $wgExtraNamespaces[2600] = 'Topic';
- Použijte deleteBatch.php k odstranění všech stránek ve jmenném prostoru tématu
- Odstraňte konfiguraci $wgExtraNamespaces
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;
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é.