Manual:Using custom namespaces/ja
組み込みの名前空間に加えて、内容を分離してより論理的に整理できるようにするために、カスタムの名前空間を 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は適切な名前空間経由でインデックスされたページを探しますが、見つからないので、内容にアクセスできません。
You can use the NamespaceDupes 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:
- 構成ファイルにある名前空間の定義をコメントアウトする
- それぞれ影響されるページにアクセスして(該当ページの特定にはウィキ上の Special:PrefixIndex を使用)、擬似名前空間の外に移動させてください。例えば、"Bar:Some page" を "Bar2:Some page" に移動させます。
- 名前空間の定義のコメントを解除する
- 影響されるページを新しい名前空間に戻す
カスタム名前空間の除去
上記で書かれた問題はカスタム名前空間が削除されるときにも起こります; MediaWikiは名前空間のための数値インデックスをもはや認識しないので、望むページのためにメインの名前空間を探そうとしますが、内容にアクセスできません。 多くのサイトではremoved名前空間が必要ではないので、これはほとんど起こりません。しかし問題があります。
MediaWiki バージョン: | ≧ 1.43 Gerrit change 1052196 |
You can use the CleanupTitles 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 like NS123:, 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).
カスタム名前空間の名前変更
ページの大量移動を行わずに、カスタム名前空間「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;
に変更します
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:
- The Translate extension creates pages with the source page's name (containing the namespace prefix) under the Translations namespace, e.g. Translations:Manual:Using custom namespaces/117/es for the Spanish translation of the 117th message on this page. When you change the namespace's name, translatable pages should be handled as if they were moved .
名前空間の衝突の回避
名前空間の競合を避けるために、例えばあなたの名前空間が他の拡張機能で定義されている名前空間と同じ番号を持っている場合は、拡張機能の名前空間一覧で競合を避けるために避けるべき番号を確認できます。
$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.