目录
嵌套页和子wiki
可以通过把页面嵌在其他页面(即文档)来组织内容。每个页面通常保存关于某个特定主题的内容。
有以下几种方法来组织你的wiki页面:
- 在一个wiki内,你可以创建页面层次结构,通过在其他页面创建页面。此功能称为嵌套页。例如,你有一个页面"Product Team"嵌在"XWiki",而"XWiki"嵌在"Rue Beaubourg","Rue Beaubourg"嵌在"Paris"。当你查看"Product Team"页面时,你可以在这个页面看到如以下所示的面包屑(你可以点击省略号展开树):
为了查看当前wiki下页面的完整结构,我们提供了一个Index Application应用程序,其中有一个树视图。例如:
我们还为每个级别提供面包屑导航树。例如:
- 你也可以用几个子wiki来组织内容。另外,你可能有如下原因希望使用subwiki而不是使用嵌套页面:
- 你想为一组用户提供自定义应用程序/扩展,而不提供给其他人
- 你想实现多租户,每个子wiki被看作是一个孤岛(各自拥有自己的用户等)
术语
- 嵌套页 (又名 非终端页):这是可以有子页面的wiki页面。技术上一个嵌套页是以空间方式实现(即一个WebHome页面)。
- 非嵌套页 (又名 终端页):这是一个不能有子页面的wiki页面。应用程序和脚本可以创建终端页面。高级用户还可以从用户界面直接创建终端页面。而普通用户只能创建嵌套页面。
- 嵌套空间: 一个空间拥有另一个空间作为父节点。用户只需要处理嵌套页面,事实上嵌套页面模拟使用嵌套空间。这就是为什么嵌套空间的概念仍然存在。
历史
截至XWiki 7.1,有2种方式来组织内容:
- Wiki > Space > Page (包括权限继承和管理员功能)
- Page > Child page > Child page of child page > ... (用于分层导航)
注意,这两个是独立的:一个页面拥有的父页面可以在不同的空间或wiki。
虽然这是起作用的,但我们发现这会导致问题,如:
- 我应该为我的团队创建一个wiki还是一个空间?
- 我应该在我的主页上放置哪个导航:空间列表或页面树视图?
- 我可以在一个空间下的一个页面设置权限?
与此同时,很长一段时间也出现了关于XWiki的未来“新模式”的讨论,理想的情况包含嵌套空间,提供以下功能:
- 统一处理分级导航(Page > Sub-page > Sub-sub-page >...)
- 导航体现在URL(.../PageA/PageB/PageC)
- 继承访问权限 (PageA权限应用到PageB和PageC, 除非另外定义。PageB权限取代PageA,同样应用到PageC)
最后,我们借用此机会,在XWiki 7.2版本,把从以前的方式改为新的方式。
一个理想情况,从旧模式改为新模式,将意味着模型需要完全重写。替换页面和空间,你将需要有一个实体。这个实体可能称为节点,将有自己的内容,相关的属性,和孩子列表(类似于JCR模式)。
而在现实中,为了不破坏与现有的许多功能和应用程序的兼容性,我们必须保持“页面”和“空间”的概念来模拟嵌套页的功能。下面是我们所做的,来实现:
- 我已经隐藏了parent-child功能
尽管它是隐藏的,如果你需要,仍然可以重新启用:在配置文件xwiki.properties设置core.hierarchyMode属性parentchild。
- 当创建一个新页面时,系统会自动创建Page.WebHome,同时创建了一个空间,尽管这是隐藏在URL(你只能看到.../Page/)
- 对于高级用户,可以创建“终端页面”,是页面不是空间。这主要为了应用程序创建者。