Manual:Using custom namespaces/zh

From MediaWiki.org
Jump to: navigation, search

每一个 MediaWiki 的安装实例都可以在内建名字空间的基础之上增添自定的名字空间,进一步将其内容分割,增强组织的逻辑性。通过$wgExtraNamespaces指令可以很容易地管理自定名字空间。

Contents

[edit] 建立自定名字空间

“LocalSettings.php”中添加自定名字空间,例如:

$wgExtraNamespaces[100] = "Foo";

注意,每一个名字空间都有一个数值编号,自定名字空间应从 100 开始。还要注意每一个偶数编号对应名字空间本身,奇数编号对应名字空间的讨论名字空间。通常一个自定名字空间会与它的讨论名字空间一起建立,因此,上面的代码可能扩展为:

$wgExtraNamespaces[100] = "Foo";
$wgExtraNamespaces[101] = "Foo_talk";

如果需要在其它地方使用自定名字空间的编号,最好为编号设定一个常量编号:

define("NS_FOO", 100);
define("NS_FOO_TALK", 101);
 
$wgExtraNamespaces[NS_FOO] = "Foo";
$wgExtraNamespaces[NS_FOO_TALK] = "Foo_talk";

阻止除了“sysops”以外的人对“Foo”名字空间进行修改,并开启“Foo”的子页面功能,这样做:

# 建立名字空间
define("NS_FOO",100);
define("NS_FOO_TALK",101);
$wgExtraNamespaces[NS_FOO] = "Foo";
$wgExtraNamespaces[NS_FOO_TALK] = "Foo_talk";
# 保护名字空间
$wgNamespaceProtection[NS_FOO] = Array("editfoo");
$wgNamespacesWithSubpages[NS_FOO] = true;
$wgGroupPermissions['*']['editfoo'] = false;
$wgGroupPermissions['sysop']['editfoo'] = true;

[edit] 内容名字空间

一个内容页面必须符合如下条件:

  • 在主名字空间或一个内容名字空间
  • 非重定向页面
  • 至少一个内部链接

通过$wgContentNamespaces设定一个自定名字空间为内容名字空间。例如在 “LocalSettings.php“ 中加入如下内容:

$wgContentNamespaces[] = 100;

会将编号为“100”的名字空间设定为内容空间。

[edit] Why you would want a custom namespace

A custom namespace can be used to hold content that should not be shown on the search results page, for example pages that are used only for transclusion.


[edit] 处理已存在的页面

在数据库中,页面是通过名字空间编号与页面名称进行索引的。如果在不存在的名字空间中建立了一个页面,例如“Bar:Some page”,它将被视为主名字空间中名称为“Bar:Some page”的页面。如果之后建立了“Bar”名字空间则会出现问题:查找“Bar:Some page”页面时,会因为在“Bar”名字空间中不存在“Some page”页面而失败。

有三种方法消除这样的错误:

[edit] 移动页面

当上述错误页面数量很少时,可以进行如下操作:

  1. 将出现错误的名字空间从配制文件中注释掉
  2. 依次将每个错误页面从先前的名字空间中移出,如“Bar:Some page”移动为“Bar2:Some page”。
  3. 将配制文件恢复原样
  4. 最后将移动的页面移回正确的名字空间

[edit] 使用维护脚本

“maintenance”目录中有一个叫“namespaceDupes.php”的脚本可以处理这个问题,其使用方法很简单,请用“--help”选项调用脚本来显示其使用说明。

[edit] 使用数据库查询

可以用如下数据库查询将所有在主名字空间的“Bar:XXXX”页面移动到编号为“100”的名字空间:

UPDATE page SET
page_title = REPLACE(page_title, 'Bar:', ''),
page_namespace = 100
WHERE `page_title` LIKE 'Bar:%' AND page_namespace=0

[edit] Removing custom namespaces

The problem addressed above also occurs when a custom namespace definition is removed; MediaWiki is no longer aware of the numerical index for the namespace, and attempts to search the main namespace for the desired pages, leading to inaccessible content. This is a rare occurrence, since most sites will not need namespaces removed, but it is a problem.

[edit] See also

Language: English  • Deutsch • 日本語 • 中文
Personal tools
Namespaces
Variants
Actions
Site
Support
Download
Development
Communication
Print/export
Toolbox