Child Parent Snippet
The following code lists all child documents of the current page. It is an alternative to the
Child Page Snippet method that doesn't require to install a plugin. The result is exactly the same as for the
Child Page Snippet:
- ChildPage1
- ChildPage2
- ChildPage3
- ChildPage5
- ChildPage8
For XWiki Syntax 2.0:
{{velocity}}
#macro(createDocumentTree $document $depth $level)
#if ($depth > 0)
#set($translated = $document.getTranslatedDocument())
#set($name = $translated.getName())
#set($fullname = $translated.getFullName())
#set($prefixed = $translated.getPrefixedFullName())
#set($where = "where doc.parent = '$name' or doc.parent = '$fullname' or doc.parent = '$prefixed' order by doc.name")
#if ($name == "WebHome")
#set($space = $document.getSpace())
#set($where = "where doc.space = '$space' and (doc.parent = '' or doc.parent = '$name' or doc.parent = '$fullname' or doc.parent = '$prefixed') and doc.name != 'WebHome' order by doc.name")
#end
#foreach($name in $xwiki.searchDocuments($where))
#if ($xwiki.getDocument($name))
#set($document = $xwiki.getDocument($name))
#set($translated = $document.getTranslatedDocument())
#set($prefixed = $translated.getPrefixedFullName())
#set($title = $translated.getDisplayTitle())
#set($indent = "")
#foreach($n in [1..$level])
#set($indent = "${indent}*")
#end
$indent [[$title>>$prefixed]]
#set($depth = $depth - 1)
#set($level = $level + 1)
#createDocumentTree($document $depth $level)
#set($depth = $depth + 1)
#set($level = $level - 1)
#end
#end
#end
#end
#createDocumentTree($doc 5 1)
{{/velocity}}
For XWiki Syntax 1.0:
#macro(createDocumentTree $document $depth $level)
#if ($depth > 0)
#set($translated = $document.getTranslatedDocument())
#set($name = $translated.getName())
#set($fullname = $translated.getFullName())
#set($prefixed = $translated.getPrefixedFullName())
#set($where = "where doc.parent = '$name' or doc.parent = '$fullname' or doc.parent = '$prefixed' order by doc.name")
#if ($name == "WebHome")
#set($space = $document.getSpace())
#set($where = "where doc.space = '$space' and (doc.parent = '' or doc.parent = '$name' or doc.parent = '$fullname' or doc.parent = '$prefixed') and doc.name != 'WebHome' order by doc.name")
#end
#foreach($name in $xwiki.searchDocuments($where))
#if ($xwiki.getDocument($name))
#set($document = $xwiki.getDocument($name))
#set($translated = $document.getTranslatedDocument())
#set($prefixed = $translated.getPrefixedFullName())
#set($title = $translated.getDisplayTitle())
#set($indent = "")
#foreach($n in [1..$level])
#set($indent = "${indent}*")
#end
$indent [$title>$prefixed]
#set($depth = $depth - 1)
#set($level = $level + 1)
#createDocumentTree($document $depth $level)
#set($depth = $depth + 1)
#set($level = $level - 1)
#end
#end
#end
#end
#createDocumentTree($doc 5 1)
Groovy version for XWiki Syntax 2.0:
{{groovy}}
def createDocumentTree(document, depth = 5, level = 1) {
if (depth == 0) {
return
}
def translated = document?.getTranslatedDocument()
def name = translated?.getName()
def fullname = translated?.getFullName()
def prefixed = translated?.getPrefixedFullName()
def title = translated?.getDisplayTitle()
def where = "where doc.parent = '${name}' or doc.parent = '${fullname}' or doc.parent = '${prefixed}' order by doc.name"
if (name == "WebHome") {
def space = document.getSpace()
where = "where doc.space = '${space}' and (doc.parent = '' or doc.parent = '${name}' or doc.parent = '${fullname}' or doc.parent = '${prefixed}') and doc.name != 'WebHome' order by doc.name"
}
def children = xwiki.searchDocuments(where)
children.each { child ->
document = xwiki.getDocument(child)
if (document == null) {
return
}
translated = document.getTranslatedDocument()
prefixed = translated?.getPrefixedFullName()
title = translated?.getDisplayTitle()
println "*" * level + " [[${title}>>${prefixed}]]"
createDocumentTree(document, depth - 1, level + 1)
}
}
createDocumentTree(doc)
{{/groovy}}
Tested with:
- XWiki Enterprise 2.2.2
- XWiki Enterprise 2.1.1
- XWiki Enterprise 2.0.5
- XWiki Enterprise 1.9.4