Manual:カスタム名前空間の使用方法
組み込みの名前空間に加えて、内容を分離してより論理的に整理できるようにするために、カスタムの名前空間を MediaWiki に追加できます。
$wgExtraNamespaces 構成ディレクティブを使用することで、カスタムの名前空間は管理が簡単です。
$wgNamespaceAliases 構成ディレクティブを使用して、カスタム (および定義済み) 名前空間のエイリアスを定義することも可能です。
いくつかの拡張機能によってカスタム名前空間を作成するのが簡単になります。
例として NamespaceManager や BlueSpiceNamespaceManager があります。
カスタム名前空間の作成
名前空間を追加登録するには、 "LocalSettings.php" ファイルの $wgExtraNamespaces グローバル変数に追加して登録します。
すべての名前空間は、この配列内で一意の数値インデックスを必要とします。
単純なカスタム名前空間の作成の例として、「Foo」名前空間 3000 とそれに付随する「Foo_talk」名前空間を定義するには、以下の数行を "LocalSettings.php" ファイルに追加します。
なお、カスタム名前空間に対応するトーク名前空間があることは、現在必須の要件です。
// 追加の名前空間の定数を定義する。
define("NS_FOO", 3000); // これは必ず偶数でなければならない。
define("NS_FOO_TALK", 3001); // これは、その次の奇数の整数でなければならない。
// 名前空間を追加する。
$wgExtraNamespaces[NS_FOO] = "Foo";
$wgExtraNamespaces[NS_FOO_TALK] = "Foo_talk"; // 名前空間名に含まれるアンダースコアに注意。
- 未使用の番号を選択
- 慣習として、100-199の番号の名前空間はサイト固有の名前空間として予約されていますが、この慣習に従わないいくつかの拡張機能も存在します。 拡張書き込み機能では、最大 32767 までの数値を使用します。 インデックスを選ぶ際には、既に 拡張機能の既定の名前空間 に入っている番号は避けるべきです。 3000から4999までの数字は、システム管理者が独自の名前空間を定義するために予約されています。 (また、すでに拡張機能で使用されている既定の名前空間にある名前空間nameは避けたいところです)。
- 偶数と次の奇数
- 上の例では、名前空間の配列のインデックスが 3000 であることに注意してください。
- 偶数の名前空間は、主となる名前空間を示します。
- 奇数の名前空間は、一つ前の数字の名前空間に関連する議論(会話)をする名前空間を示します。
- トーク名前空間も作成
- 通常、議論の「トーク」名前空間は、各カスタム名前空間と共に作成します。 この例では、ページの移動 を "Foo" 名前空間に移動すると、関連するトークページがあれば移動するように促され、移動することを選択すると、MediaWiki はそのトークページを "Foo talk" に配置します。
- 空白を含めない
- 名前空間を登録する際は、スペースの代わりにアンダースコアを使ってください。 “My Namespace”は、名前空間の登録においては無効ですので、代わりに“My_Namespace”を使ってください。
- ハイフンを含めない
大文字の部分ではハイフンを使用できませんが、接頭辞タイトルに安全に追加できます。 例:
$wgExtraNamespaces[NS_FOOFOO] = "Foo-Foo";
- 選択した番号に名前を付ける
- この例では、名前空間IDに定数を定義しています。これは、後ほど
$wgNamespaceProtection、$wgNamespacesWithSubpages、$wgExtraGenderNamespacesなどの設定で、これらの名前空間を参照できるようにするためのものです。
新しい名前空間の追加設定を構成することもできます。
$wgNamespaceProtection[NS_FOO] = [ 'editfoo' ]; // foo 名前空間 の編集に必要な "editfoo" 権限
$wgNamespacesWithSubpages[NS_FOO] = true; // foo 名前空間で有効な下位ページ
$wgGroupPermissions['sysop']['editfoo'] = true; // "sysop" グループの利用者に許可された "editfoo" 権限
- 早めに行う
$wgExtraNamespacesの操作はMediaWikiの初期設定の間に完了しなければなりません。すなわち、拡張機能などが新しく作成されたカスタム名前空間で動作する場合、それぞれの拡張機能を呼び出す前にそれらを定義し名前を付けることを確認します。たとえば、それは$wgExtensionFunctionsのような初期化後のフックで操作されることはありません。
- URLプロトコルとの衝突に注意
- MediaWikiのリンクコードは $wgUrlProtocols 変数で定義された、いくつかのURLプロトコルについて知っています。 名前空間名がこれらのプロトコルと同一である場合、カスタム名前空間のページへの [[wikilinks]] を作成するのに苦労するでしょう。 これは、誰かが "News" 名前空間を作成しようとしたときに最もよく発生するもので、
news:は NNTP ニュースグループの URL プロトコルだからです。 - この問題を回避するには、LocalSettings.php ファイルに以下のコードを追加して、関連するURLプロトコルの登録を解除します(
newsを削除したいプロトコルの小文字の名前で置き換えます)。
$wgUrlProtocols = array_diff( $wgUrlProtocols, array( 'news:' ) );
拡張機能
| MediaWiki バージョン: | ≧ 1.25 Gerrit change 166705 |
拡張機能では、Flow 拡張機能の "Topic" 名前空間のように、独自の名前空間を追加することがよくあります。
extension.json 登録システムには、名前空間を列挙するための拡張機能用の namespaces キーがあります。
拡張機能 Gadgets から:
"namespaces": [
{
"id": 2300,
"constant": "NS_GADGET",
"name": "Gadget",
"protection": "gadgets-edit"
},
{
"id": 2301,
"constant": "NS_GADGET_TALK",
"name": "Gadget_talk"
},
]
ここでは、コンテンツの名前空間にするかどうかなど、他の名前空間に関連する設定も行えます。利用できるプロパティは Manual:extension.json/スキーマ を参照してください。
名前空間の登録が条件付きの場合 (例えば、EventLogging がスキーマを保存するウィキでのみ「Schema」名前空間を定義する場合)、拡張機能は extension.json で名前空間の定義に "conditional": true を追加し、名前空間を登録するかどうかを決定する CanonicalNamespaces フックのハンドラーもそこで登録する必要があります。
フック ハンドラーは呼び出された $namespaces のみを変更し、それ以外の名前空間設定はすべて extension.json に登録されたままにする必要があります。
それらの設定も動的にする必要がある場合は、CanonicalNamespaces フック ハンドラー内で $wgContentNamespaces、$wgNamespaceContentModels などを変更しないでください (効果はありません – T288819)。代わりに、ll|Manual:Extension.json/Schema#callback コールバックのように、もっと早い段階で設定する必要があります ($wgExtensionFunctions ではありません)。
LocalSettings.php に拡張機能を追加しても、関連する名前空間の定数が他の拡張機能に対してグローバルで利用可能になるとは限らないことに注意してください。
コンテンツ名前空間
サイトの統計ページを構築するとき(Special:Statistics を参照)、MediaWikiはある合計値を計算するためにデータベースに保存された変数を使用します。 一つの特定の合計値は"記事の数"もしくは"内容ページの数"の合計値です。
記事もしくは適切な内容としてページがみなされるようにするために、次のことをしなければなりません:
- 標準名前空間内、または定義済みの本文名前空間内に配置する
- リダイレクト ページではないように
$wgArticleCountMethodで構成されるように、少なくとも1つ内部リンクを含む。
追加のコンテンツを保持するためにカスタム名前空間を作成する際には、それを設定で示すことはいい考えです。 これは $wgContentNamespaces 構成ディレクティブ経由で行われます。
上記の例を拡張するために、次の内容を "LocalSettings.php" ファイルに追加します:
$wgContentNamespaces[] = 3000;
- または
$wgContentNamespaces[] = NS_FOO;
これでMediaWikiはページが含んでいる基準(criteria)と合う場合に"Foo"名前空間にあるページを記事と見なすようになり、サイト統計カウンターをアップデートするときにインクルードされます。
メンテナンス スクリプトの実行
構成パラメーター $wgContentNamespaces の値を調整するとき、内部の統計キャッシュをアップデートする "path/to/maintenance/updateArticleCount.php や "path/to/maintenance/initSiteStats.php" のスクリプトを実行することはよいアイディアです (Manual:メンテナンススクリプト を参照)。
カスタム名前空間が必要な場合
これを必要とする理由はいくつかあります。
- カスタム名前空間は、検索結果ページに表示されるべきでないコンテンツ、例えば参照読み込みにのみ使用されるページなどを保持するために使用できます。
- 特定の名前空間では、編集に追加権限が必要です。
- 特定の名前空間に特定の制限や既定の設定を適用させたくない場合 (たとえば $wgNoFollowNsExceptions など)
- 特定のコンテンツに対して、その名前空間のみで検索可能な統一接頭辞
- MWの開発者であれば、時にはカスタムで拡張機能の名前空間を用意する必要があります。
既存のページを取り扱う
ページレコードを保存するとき、MediaWikiはタイトルのテキストに加えて、名前空間の数値インデックスを使用します。 ページが存在しない名前空間に作成されたとき、例えば、"Bar:Some page"、メインの名前空間にあるものとして取り扱われます。
"Bar"のためにカスタムの名前空間を後で追加する場合、このことによって問題を起こす可能性があります。MediaWikiは適切な名前空間経由でインデックスされたページを探しますが、見つからないので、内容にアクセスできません。
この問題を修正するには、NamespaceDupes メンテナンス スクリプトを使用できます。
定義された名前空間のいずれかに一致する接頭辞を持つ標準名前空間のページを検索し、そのレコードを更新します。
メンテナンス スクリプトを実行できない場合は、以下の方法が適しているかもしれません:
- 構成ファイルにある名前空間の定義をコメントアウトする
- それぞれ影響されるページにアクセスして(該当ページの特定にはウィキ上の Special:PrefixIndex を使用)、擬似名前空間の外に移動させてください。例えば、"Bar:Some page" を "Bar2:Some page" に移動させます。
- 名前空間の定義のコメントを解除する
- 影響されるページを新しい名前空間に戻す
カスタム名前空間の除去
上記で書かれた問題はカスタム名前空間が削除されるときにも起こります; MediaWikiは名前空間のための数値インデックスをもはや認識しないので、望むページのためにメインの名前空間を探そうとしますが、内容にアクセスできません。 多くのサイトではremoved名前空間が必要ではないので、これはほとんど起こりません。しかし問題があります。
| MediaWiki バージョン: | ≧ 1.43 Gerrit change 1052196 |
この問題を修正するには、CleanupTitles メンテナンス スクリプトを使用できます。
もはや定義されていない名前空間のページをすべて検索し、そのレコードを更新します。
スクリプトのパラメーターで別途指定がない限り、ページは NS123: のような接頭辞を付けて標準名前空間に移動されます。
上記と同様に、名前空間の設定を一時的に復元し、ユーザー インターフェースからページを移動 (または削除) することもできます。
カスタム名前空間の名前変更
ページの大量移動を行わずに、カスタム名前空間「Foo」を「New」に改名する必要があるとします。
これを実現する最も簡単な方法は、名前空間ID(ここでは"3000")と名前空間定数(ここでは"NS_FOO")を保持し、(目に見える)名前空間タイトルを変更して、古いものをエイリアスとして追加することです。
define("NS_FOO", 3000);
$wgExtraNamespaces[NS_FOO] = "Foo";
を
define("NS_FOO", 3000);
$wgExtraNamespaces[NS_FOO] = "New";
$wgNamespaceAliases['Foo'] = NS_FOO;
に変更します
一部の拡張機能は名前空間名を内部 ID ではなくプレーン テキストで保存するため、特に注意して取り扱う必要があります。 例としては以下があります:
- Translate 拡張機能は、Translation 名前空間に、翻訳元のページ名 (名前空間接頭辞を含む) を使用してページを作成します。例えば、このページの 117 番目のメッセージのスペイン語翻訳は Translations:Manual:Using custom namespaces/117/es になります。 名前空間の名前を変更する場合、翻訳対象ページは移動されたかのように扱うべきです。
名前空間の衝突の回避
名前空間の競合を避けるために、例えばあなたの名前空間が他の拡張機能で定義されている名前空間と同じ番号を持っている場合は、拡張機能の名前空間一覧で競合を避けるために避けるべき番号を確認できます。
$wgExtraNamespaces の既存の名前空間に関連しないIDのために$wgNamespacesToBeSearchedDefault、$wgNamespacesWithSubpages、$wgContentNamespacesもしくは$wgNamespaceAliasesを定義することはwikiを壊しません; MediaWikiはそのような設定を無視します。
名前空間のスタイル設定
特定の名前空間 (と、それに付随するトーク名前空間) のページの背景色を設定する最も簡単な方法は、以下のコードを common.css に追加することです:
.ns-3000 #content, .ns-3001 #content { background-color: #f3f3ff; }
.ns-3000 div.thumb, .ns-3001 div.thumb { border-color: #f3f3ff; }
ここで、3000 は名前空間のインデックス、#f3f3ff は背景色として使用したい色です。
ただし、ニーズが非常に基本的な場合を除き、現代の標準では夜間モードへの対応が求められることが多いため、固定色の使用によるアクセシビリティ上の問題を避けるためにも対応することをお勧めします。
詳細は ウィキメディアのウィキ群における夜間モードとの互換性に関する推奨事項 を参照してください。
また、タブの名前を既定値 (名前空間の名前) から変更したい場合もあるかもしれません。 This is located in your system messages at MediaWiki:nstab-namespace.
関連項目
- Manual:名前空間
- Namespace manager – もともとは MW1.6-wikidata とその後継のために提案されました。 現在はOmegaWikiプロジェクトによって使用されています。
サイト管理
拡張機能
- カテゴリ:名前空間の拡張機能
- Extension:NamespaceManager – for management of namespaces
- Extension:BlueSpiceNamespaceManager – lets you create custom namespaces
- Extension:SpecialNamespaces – の修正バージョンで、namespace managerを特別ページとして提供します。
- Extension:Lockdown – 名前空間へのアクセスを制御する
拡張機能の開発者向け
- Extension namespace registration – List of custom namespaces registered by extensions. If you define a constant for a custom namespace, list it here, too.