Příručka:Použití vlastních jmenných prostorů

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

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 .

Před manipulací se jmennými prostory se doporučuje zajistit, aby ve frontě úloh nebyly žádné čekající úlohy, aby se zabránilo selhání takových úloh, pokud cílí na stránky z jmenných prostorů, které se chystáte odstranit nebo přejmenovat. Použijte runJobs.php ke spuštění všech čekajících úloh a vyčistěte frontu před manipulací s konfigurací jmenného prostoru.

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 rovnoměrné.
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 extension default namespaces , 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.
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

Rozšíření často přidávají své vlastní jmenné prostory, jako je jmenný prostor "Topic" rozšíření Flow . Rozšíření může bezpodmínečně přidávat do $wgExtraNamespaces, jak je popsáno výše, nebo pokud je registrace jeho jmenného prostoru podmíněná (například EventLogging definuje pouze svůj jmenný prostor "Schema" na wiki, kde ukládá schémata), pak může přidat funkci handleru pro CanonicalNamespaces háček, který rozhoduje, co dělat.

Načasování registrace rozšíření je jemné. Funkce, které rozšíření registrují pomocí $wgExtensionFunctions , se provádějí příliš pozdě na to, aby registrovaly další jmenné prostory (úkol T47031). Rozšíření by tedy měla vázat háček CanonicalNamespaces v rozsahu souboru (v MyExtension.php) a tam zkontrolovat, zda má wiki aktivovat zvláštní jmenný prostor nebo ne. Rozšíření mohou bezpodmínečně konfigurovat oprávnění jmenného prostoru a obslužné rutiny obsahu v rozsahu souboru, protože nevyžadují, aby byl jmenný prostor skutečně vytvořen.

Verze MediaWiki:
1.25
Gerrit change 166705

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"
		},
]

Podporuje také háček CanonicalNamespaces. Rozšíření by měla preferovat registraci rozšíření před CanonicalNamespaces. 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í:

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:

  1. Zakomentujte definici jmenného prostoru v konfiguračním souboru
  2. 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"
  3. Odkomentujte definici jmenného prostoru
  4. 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

Správa stránek

Rozšíření

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é.