Display list of pages and their current versions

danoz October 9, 2016

Hi there,

I'm wondering if anybody could please help me with the following...

I am using Confluence Cloud. I would like to create a confluence page, think of it like an index or contents page, that lists a number of other pages contained within the space along with the current version and change log for each page listed.

For example...


Welcome to my Index/Contents page

Page NameCurrent VersionChange Comment
Example page 1v. 1Initial version
Some other pagev.3Made a few changes
Yet another pagev. 2Minor spelling fix

 

I would like the Current Version and Change Comment values to be referenced from the actual pages themselves. That way they would always stay current/up-to-date automatically and wouldn't require me to update them manually.

Does anyone know if this is possible?

Thanks in advance for your time considering this question.

Regards,
Dan

1 answer

1 accepted

1 vote
Answer accepted
Franz Limbacher October 10, 2016

Hi Dan,

Of course its possible!

You have two possabilites:

  • You can write an User Macro or
  • you can write a Plugin with an Macro Modul

Either ways, the functionality is pretty the same.

Via the contentAcessor you get the pageManager.
Via pageManager you get the Page by name (for example a parameter)
You can also use getPages or getPagesStartingWith 
For each page you can get the children of a page.

For a User Macro it could look like this (I didn't test it):

## Set the Parameters 
 
# (...)

## Specify the page, this macro is based on

#set($key="SPACE")
#set($name="Page")

## Specify the parameters for that page

## (...)

## Get PageManager object instance
#set($containerManagerClass=$content.class.forName('com.atlassian.spring.container.ContainerManager'))
#set($getInstanceMethod=$containerManagerClass.getDeclaredMethod('getInstance',null))
#set($containerManager=$getInstanceMethod.invoke(null,null))
#set($containerContext=$containerManager.containerContext)
#set($pageManager=$containerContext.getComponent('pageManager'))
 
## Get the Pages
#set($pages=$pageManager.getPagesStartingWith($key,$name))

## Render the page with the parameters above
<table>
  <tr>
    <th>Page Name</th>
    <th>Current Version</th> 
    <th>Change Comment</th>
  </tr>
 
#foreach($page in $pages)
  <tr>
    <td>$page.getTitle()</td>
    <td>$page.getLatestVersion()</td> 
    <td>$page.getVersionComment</td>
  </tr>
#end

</table>

For Documentation of the classes and functions read this:

https://docs.atlassian.com/atlassian-confluence/latest/com/atlassian/confluence/pages/PageManager.html
https://docs.atlassian.com/atlassian-confluence/latest/com/atlassian/confluence/pages/Page.html

If you need help for writing User Macros: https://confluence.atlassian.com/doc/writing-user-macros-4485.html

If you need help for writing Plugin Macros: https://developer.atlassian.com/confdev/tutorials/macro-tutorials-for-confluence/creating-a-new-confluence-macro

I hope this helps you.

Kind Regards Franz

Lionel Seaw July 30, 2019

hi... do you happen to have a working version of this macro? i need to display a table of all child pages and their versions

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events