命名空间

来自istudylinux

命名空间(Namespace)是一组目的近似的页面组合[1]

概述

在以Mediawiki软件为基础的网站上,你会时常看到

等样式的页面标题。

以上就是以命名空间前缀冒号分割,然后加上页面标题。主命名空间(main namespace)不需要前缀。[1]

如果你在网站搜索页面点击高级,你可以看到当前你网站的一些内建命名空间前缀有哪些,如果你没有自定义命名空间,该页面呈现的就是当前可搜索(可配置可不可搜索)的命名空间。[1]

内建命名空间

MediaWiki拥有18个内建的命名空间:

  • 16个“真实”命名空间(real namespace),代表实际存在的页面,编号为0到15,每个主题页面都有对应的讨论命名空间;
  • 2个“虚拟”命名空间(virtual namespace),一个是动态生成的特殊页面,另一个用作外部文件的快捷方式,编号分别为-1和-2。因为它们并不是表示数据库中存储的实际页面,所以不可以在这两个命名空间中创建或者删除页面,它们也没有相关联的讨论命名空间。[1]
  • 下面的中文名称可从安装目录下的languages/messages/MessagesZh.php里面查看到
内建命名空间
索引 英文名称 中文名称 常量[2] 用途
0 (Main) (主) NS_MAIN “真实”条目内容
1 Talk 讨论 NS_MAIN_TALK 主命名空间讨论页
2 User 用户 NS_USER 用户页
3 User talk 用户讨论 NS_USER_TALK 用户讨论页
4 Project $1 NS_PROJECT 关于该wiki的信息
5 Project talk $1讨论 NS_PROJECT_TALK 关于该wiki的信息讨论
6 File 文件 NS_FILE 媒体描述页面
7 File talk 文件讨论 NS_FILE_TALK 媒体描述页讨论
8 MediaWiki MediaWiki NS_MEDIAWIKI 网站界面定制
9 MediaWiki talk MediaWiki讨论 NS_MEDIAWIKI_TALK 网站界面定制讨论
10 Template 模板 NS_TEMPLATE 模板页面
11 Template talk 模板讨论 NS_TEMPLATE_TALK 模板页讨论页
12 Help 帮助 NS_HELP 帮助页面
13 Help talk 帮助讨论 NS_HELP_TALK 帮助页讨论
14 Category 分类 NS_CATEGORY 分类描述页面
15 Category talk 分类讨论 NS_CATEGORY_TALK 分类描述页讨论
-1 Special 特殊 保留特殊页面
-2 Media 媒体文件 直接链接到媒体文件的别名

从上面的表可以看出:

  • 除了索引为负数的两个特殊前缀,其余的都带有自己的讨论页
  • 0,2,4,6等主要命名空间都是偶数,讨论页都是奇数
  • 常量(PHP代码里面使用)都是以NS_英文名称,而讨论页则直接在后面加NS_英文名称_TALK
  • 索引为4,5中的project为你当前网站的名称,在LocalSettings.php里就是下面代码。你网站最下面的关于xxxx就是该命名空间下的页面,$wgMetaNamespace[3]可以为任意值,等号后面需要使用单引号。
$wgSitename = "istudylinux";
$wgMetaNamespace = 'Istudylinux';

自定义命名空间

参考文章[4]

作用,好处

  • 不希望有的内容出现在搜索框
  • 可以配置内容权限,比如仅将该命名空间给注册用户编写,见命名空间#设置权限
  • 扩展开发需要[5]

配置

注意事项:

  • 在软件安装后就及时添加
  • 尽量使用下划线连接(_),不要使用空格
  • 主命名是偶数,然后讨论加1,不要是3000,然后3003
  • 3000到4999[4]是留给网站维护者进行命名空间使用,请遵守该规则
  • 本文以NS_SITENS_SITE_TALK为例
# 旁白:为我添加的命名空间定义常量。
define("NS_SITE", 3000); # 旁白:这必须是偶数
define("NS_SITE_TALK", 3001); # 旁白:这必须是下一个奇整数

# 旁白:添加命名空间。
$wgExtraNamespaces[NS_SITE] = "网站";
$wgExtraNamespaces[NS_SITE_TALK] = "网站讨论"; //旁白:请注意命名空间名称中的下划线

添加上面的代码就可以在搜索框看到对应的命名空间了,下面的是一些Plus功能。

添加别名

# 旁白:添加别名,通常是多语言使用,注意下划线;别名可以随便取无所谓,只要懂意思
$wgNamespaceAliases['Site'] = NS_SITE;
$wgNamespaceAliases['Site_talk'] = NS_SITE_TALK;
# 旁白:添加许多别名,多的可以使用数组方式
$wgNamespaceAliases = [
        'Site' => NS_SITE,
        'MySite' => NS_SITE,
        'Site_talk' => NS_SITE_TALK,
        'MySite_talk' => NS_SITE_TALK
];
  • 假如有个页面网站:谷歌Site:谷歌MySite:谷歌最后都自动跳转到网站:谷歌这个页面
  • 该方式也可以重命名命名空间,只不过最后显示的仍旧是你前面$wgExtraNamespaces定义的名称

重命名

如果不满意网站这个命名空间名称,可更改,只要保留ID号(3000,30001)和常量NS_SITE[4]

# 旁白:为我添加的命名空间定义常量。
define("NS_SITE", 3000); # 旁白:这必须是偶数
define("NS_SITE_TALK", 3001); # 旁白:这必须是下一个奇整数

# 旁白:重命名 命名空间。
# $wgExtraNamespaces[NS_SITE] = "网站"; # 删掉或者注释掉
$wgExtraNamespaces[NS_SITE] = "小网站";

设置权限

$wgNamespaceProtection[NS_SITE] = array( 'editSite' ); // permission "editfoo" required to edit the foo namespace
$wgGroupPermissions['user']['editSite'] = true;      # 仅用户组的成员可编辑该命名空间下的内容

其他常用的配置

参考页面[6][7]

# 允许创建子页面,默认false
$wgNamespacesWithSubpages[NS_SITE] = true; 

命名空间设置样式

Mediawiki:common.css里面添加对应的CSS样式代(需要前端功力):[4]

.ns-3000 #content, .ns-3001 #content { background-color: #f3f3ff; }
.ns-3000 div.thumb, .ns-3001 div.thumb { border-color: #f3f3ff; }

处理存在的页面

参考官网

一些已经被使用的索引

链接[resource_link 1]包含MW内建的18个命名空间索引号,还有其他的已经被extensions所占用的索引号,为了防止冲突,在开发扩展或者自定义命名空间时,先检查一下。

资料