Bis jetzt nutzte ich in Confluence ein Makro, welches Spaces nach Kategorie gefiltert auflistet. Das ist schön, da man in den Space-Einstellungen die entsprechenden Kategorien (über der Beschreibung) angeben und danach filtern kann. Dieses Makro ist seit Confluence 9 nicht mehr kompatibel und nutzt veraltete, entfernte Java-Methoden.
Besser und simpler lässt sich das Makro mittels Javascript und der Confluence REST API darstellen. Der Vorteil: Ob ein Space für den eingeloggten oder auch nicht eingeloggten Nutzer sichtbar ist, steuert hier bereits die API und es ist keine weitere Prozessierung nötig.
Confluence bringt auch ein Makro ab Werk „Bereichsliste“ oder „Space list“, welches man jedoch nicht per Default nach einer bestimmten Kategorie filtern kann. Eine entsprechende Anfrage wurde geschlossen mit der Aussage, dass solch ein Feature aufgrund des geringen Interesses nicht umgesetzt werden würde. Schade!
Im obigen Link habe ich das aktualisierte Makro als Kommentar hinterlassen. Hier der Vollständigkeit halber nochmal:
## User Macro: spaces-by-category
##
## Created by: Malte Schmidt <m@maltris.org> as REST version
## Adapted from David Simpson <david@appfusions.com> 2014-08
## Adapted from Remo Siegwart's answer at http://web.archive.org/web/20140813094412/https://answers.atlassian.com/questions/274837/show-a-space-list-within-a-page-using-category-label
##
## @param Label:title=Space Label|type=string|required=true|desc=Label to search for (e.g. "product")
## Generate unique container ID based on macro instance
#set ($containerId = "spaces-by-label-" + $paramLabel)
<div id="$containerId" class="spaces-by-label">
<p>Loading spaces with label "$paramLabel"...</p>
</div>
<script>
(function(containerId, label) {
document.addEventListener('DOMContentLoaded', function() {
var container = document.getElementById(containerId);
if (!label.trim()) {
container.innerHTML = '<div class="aui-message error">Please specify a label</div>';
return;
}
fetch('/rest/api/space?label=' + encodeURIComponent(label))
.then(function(response) {
if (!response.ok) throw new Error('HTTP ' + response.status);
return response.json();
})
.then(function(data) {
if (data.results.length > 0) {
var html = '<ul>';
data.results.forEach(function(space) {
html += '<li><a href="' + space._links.webui + '">' + space.name + '</a></li>';
});
container.innerHTML = html + '</ul>';
} else {
container.innerHTML = '<div class="aui-message info">No spaces with label "' + label + '"</div>';
}
})
.catch(function(error) {
container.innerHTML = '<div class="aui-message error">' +
(error.message.includes('403') ? 'Login required' : 'Error loading spaces') +
'</div>';
});
});
})("$containerId", "$paramLabel");
</script>
Viel Erfolg mit dem aktualisierten Makro für Version 9 und höher von Confluence.