如何修改Confluence以允许重复的页面标题

8

我正在使用Confluence进行文档编写,其中包括终端用户文档和内部开发文档。

Confluence的问题在于它不允许有重复的页面标题,因为URL只包含标题而不是整个树结构。

是否有任何方法可以更改这种行为?

有一个插件可以做到这一点,而且功能很多。 "功能很多" 这一部分是问题所在,因为该插件相当昂贵,尤其是如果只使用其中的一个功能 (https://marketplace.atlassian.com/plugins/com.k15t.scroll.scroll-versions)。


你真的需要拥有相同的页面名称吗?链接可以使用任何文本,拥有唯一的页面名称不会是一个大问题。 - MNRSullivan
我会说是的。一个很好的例子就是客户信息记录的区域。结构应该是这样的: 客户姓名 > 协议 客户姓名 > 联系信息在这种情况下,整个客户空间中只能有一页被命名为“协议”。 - Frazer
1
你能给出更多需要重复名称的示例吗? - Underverse
@underverse “Introduction(介绍)”是很常见的一个名字。比如你在同一空间内有“foo”项目和“bar”项目,你想为它们各自创建一个介绍页面。现在你必须分别称它们为“Foo Introduction”和“Bar Introduction”,这违反了DRY原则和Smurf原则。 - interestedparty333
据我所知,只有当两个页面的内容基本相同时,才会违反“不要重复自己”的原则。鉴于Foo和Bar是不同的项目,可能有不同的项目经理、不同的目标、时间框架等,因此需要命名不同的两个页面。我不知道“smurf principle”是什么-请提供链接。 - Underverse
@underverse,确实,我正在考虑页面的层次结构作为名称的一部分。例如,如果您查看页面树视图,您将看到“Foo-> Foo Introduction”。Smurf只是DRY的另一个版本,但您可以在此处查看#21:https://blog.codinghorror.com/new-programming-jargon/ - interestedparty333
5个回答

13

当我们在维基中添加“虚拟员工文件夹”时,我们遇到了相同的问题。我们想要构建以下页面结构:

Employee 1
 Personal Data
 Contract Data
 Training
 ...
Employee 2
 Personal Data
 Contract Data
 Training
 ...
Employee X
 Personal Data
 Contract Data
 Training
 ...

我们用了一个有点脏但非常有效的解决方法:首先通过添加特定于员工的前缀使页面名称唯一:

Employee 1
 Employee 1 - Personal Data
 Employee 1 - Contract Data
 Employee 1 - Training
 ...
Employee 2
 Employee 2 - Personal Data
 Employee 2 - Contract Data
 Employee 2 - Training
 ...
Employee X
 Employee X - Personal Data
 Employee X - Contract Data
 Employee X - Training
 ...
我们定义了自己的“标签”来标记页面标题中不应出现在Confluence前端的部分:
Employee 1
 [hide]Employee 1 - [/hide]Personal Data
 [hide]Employee 1 - [/hide]Contract Data
 [hide]Employee 1 - [/hide]Training
 ...
Employee 2
 [hide]Employee 2 - [/hide]Personal Data
 [hide]Employee 2 - [/hide]Contract Data
 [hide]Employee 2 - [/hide]Training
 ...
Employee X
 [hide]Employee X - [/hide]Personal Data
 [hide]Employee X - [/hide]Contract Data
 [hide]Employee X - [/hide]Training
 ...

剩余的部分需要一点 JavaScript 魔法,嵌入到 Confluence 管理员 > 自定义 HTML 中:

<script>(function() {

    var expr = /\[hide\].*?\[\/hide\]/g,
        blacklist = ['textarea', 'form', 'pre', 'script', 'style'];

    $(document)
        .ajaxSuccess(hideTextParts)
        .on('ready', hideTextParts);

    function isChildOfBlacklistedTag(node) {
        while(node = node.parentNode) {
            if (node.nodeType === Node.ELEMENT_NODE && blacklist.indexOf(node.nodeName.toLowerCase()) > -1) {
                return true;
            }            
        }
        return false;
    }

    function hideTextParts() {
        var root = document,
            walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null, false),
            node;

        while (node = walker.nextNode()) {
            console.info(node.parentNode);
            if (expr.test(node.textContent) && !isChildOfBlacklistedTag(node)) {
                node.textContent = node.textContent.replace(expr, " ");
            }
        };
    }

})();
</script>
黑名单确保“标签”不会在需要显示的位置隐藏。例如,在页面编辑屏幕的标题字段中以及在空间管理中的CSS编辑字段中。您可能希望扩展到

黑名單可確保"標籤"不在需要顯示的地方被隱藏。例如在頁面編輯屏幕的標題欄位中以及在空間管理中的CSS編輯欄位中。您可能希望擴展至


3

虽然我知道有些晚了,但是如果还有其他人需要这个解决方案,我的解决方案不需要任何JavaScript诡计或特殊插件,只需要一个看不见的ASCII代码。

我在标题末尾添加ASCII字符255(或者根据需要添加多个)。它显示为空格,因此不会出现在标题中。只有在您不关心将标题作为URL的一部分时,这才是有效的选项,因为Confluence将通过页面ID链接到该页面(例如:https://confluence.yourcompany.com/pages/viewpage.action?pageId=44335161)。

如果您不知道如何输入ASCII代码,只需在数字键盘上按住Alt键,然后键入255(或任何其他ASCII代码)。


2
Atlasian已经声明他们不会改变这种行为。有像Scroll Versions这样的插件可以解决这个问题,但你可能需要重新考虑你的维基结构。
维基百科允许同名的多个页面吗?它不允许。如果你放弃对你的维基进行分层排序的想法,而是开始使用搜索功能和标签,一切就都有意义了。
在设置我们项目的文档时,我们也有过同样的讨论。如果你有150页以上都叫做“文档”,那该怎么办?如果你不知道确切的产品名称,尝试搜索一下。

1
请注意...上面的“插件”链接将带您进入“滚动版本”附加组件,价格为300美元。 - Chris Sprague
如果你找到了一个免费的版本可以实现这个功能,随时可以提供链接。虽然没有人说它是免费的;)而且价格会随着许可证规模的增加而增加。 - Calon
我认为你提供了一个很好的插件,提供了所需的功能,并且我想补充一些信息以防链接失效。如果我找到一个免费的,我肯定会注意它 :) - Chris Sprague
很好的观点。我编辑了我的帖子,告诉人们他们将跳到哪里。 - Calon

1
Confluence不仅仅是一个维基系统,它似乎还推广使用文档层次结构。一个假设的例子可能是:
MongoDB 
    Installation
        Linux
        Windows
        Mac
    Security
    Data Model

我希望页面标题能够保持简短,而不是像“MongoDB -> 安装 -> Linux”这样命名。
但是如果我只是保持它们简短,那么在这个文档和其他文档之间会发生各种名称冲突。

1
我的公司也遇到了这个问题。更好的处理方法是为每个“上下文”创建一个工作区。在我看来,如果您需要在创建每个页面时插入前缀,那么它似乎是上下文划分。因此,最好将每个上下文插入到自己的Confluence空间中。
仪表板-空间1-我的页面 仪表板-空间2-我的页面
当您创建空间时,可以对其进行分类,因此可以插入标签,例如“项目”,“数据库”,“应用程序”等。 https://confluence.atlassian.com/display/DOC/Using+Labels+to+Categorise+Spaces 问候

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接