命名空间
来自istudylinux
Istudylinux(讨论 | 贡献)2022年11月24日 (四) 14:17的版本
命名空间(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]。
作用,好处
配置
注意事项:
- 在软件安装后就及时添加
- 尽量使用下划线连接(_),不要使用空格
- 主命名是偶数,然后讨论加1,不要是3000,然后3003
- 3000到4999[4]是留给网站维护者进行命名空间使用,请遵守该规则
- 本文以
NS_SITE
和NS_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; # 仅用户组的成员可编辑该命名空间下的内容
其他常用的配置
# 允许创建子页面,默认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所占用的索引号,为了防止冲突,在开发扩展或者自定义命名空间时,先检查一下。
资料
- ↑ 1.0 1.1 1.2 1.3 MW手册:命名空间
- ↑ 命名空间常量列表
- ↑ https://www.mediawiki.org/wiki/Manual:$wgMetaNamespace/zh
- ↑ 4.0 4.1 4.2 4.3 https://www.mediawiki.org/wiki/Manual:Using_custom_namespaces/zh
- ↑ https://www.mediawiki.org/wiki/Manual:Using_custom_namespaces/zh#为什么要自定义命名空间
- ↑ https://www.mediawiki.org/wiki/Manual:$wgNamespacesWithSubpages
- ↑ https://www.mediawiki.org/wiki/Manual:$wgNamespacesToBeSearchedDefault