With some digging in the Atlassian confluence documentation and with some helpful comments i figured it out by myself and wrote a macro for it.
The macro is based on the render macro from James Mortimer (thx for it) and a code snippet from Azwandi Mohd Aris from Atlassian.
Below is the source of the macro. Just create a new user macro which outputs HTML and is set to have no body.
## declare render macro ## thanks to James Mortimer ## see http://confluence.atlassian.com/display/DISC/Render+any+text+from+a+user+macro #macro(trimp $xhtml) ## remove leading and trailing #if($xhtml.startsWith("",0) && $xhtml.endsWith(" ")) #set($len=$xhtml.length()-$generalUtil.convertToInteger(4)) #set($xhtml=$xhtml.substring(3,$len)) #end $xhtml #end #macro(render $wiki) #set($globalHelper=$action.getHelper()) #if($content)## i. e. we render a normal page #set($renderer=$globalHelper.getWikiStyleRenderer()) #set($context=$content.toPageContext()) #set($xhtml=$renderer.convertWikiToXHtml($context, $wiki).replaceAll("\n|\r","")) #else## we are e. g. in Global Template Preview #set($xhtml=$globalHelper.renderConfluenceMacro($wiki).replaceAll("\n|\r","")) #end #trimp(${xhtml}) #end ## get pagemanager ## thants to Azwandi Mohd Aris [Atlassian] ## see http://confluence.atlassian.com/display/DOC/Include+Page+Macro?focusedCommentId=218279433#comment-218279433 #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')) ## parse the parameters #set($spacekey=$space.key) #if($paramspace) #set($spacekey=$paramspace) #end #set($pageversion='0') #if($paramversion) #set($pageversion=$paramversion) #end #set($pagename="undefined") #if($parampage) #set($pagename=$parampage) #end ## parse the versionstring to an int #set($versionInt=$generalUtil.convertToInteger($pageversion)) #set($helper=$action.getHelper()) #set($page=$pageManager.getPage($spacekey,$pagename)) ## only advance if we have a page #if($page) #set($historypage=$pageManager.getOtherVersion($page,$versionInt)) #end #if($historypage.getId()==$content.getId()) $helper.renderConfluenceMacro("{warning}The version '$pageversion' of page '$pagename' in space '$spacekey' is the same page as this one! Please correct the version information used for the include macro.{warning}") #elseif($historypage) #render($historypage.getContent()) #else $helper.renderConfluenceMacro("{warning}Version '$pageversion' of page '$pagename' in space '$spacekey' not found!{warning}") #end
Usage:
{pageinclude:page=name of the page|version=x[|space=spacekey]}
The spacekey is optional. By default the spacekey of the current space is used.
Example:
If you want to include the page "Demonstration" in version 3 from the space with the key "myspace" use the following macro statment
{pageinclude:page=Demonstration|version=3|space=myspace}
Important:
Do not surround the pagename and the spacekey with quotes!
Have fun with it! :-)
P.S. Do not try to include the same page and version as the page that includes the macro. I took this into account! ;-)