Child Parent Snippet

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
      • ChildPage4
    • ChildPage5
      • ChildPage6
      • ChildPage7
  • 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
Tags:
Created by Uwe Stöhr on 2009/10/20 15:29
Last modified by Clemens Fuchslocher on 2010/03/14 18:32

This wiki is licensed under a Creative Commons license
2.2.1.27354