Back

Content Driven Menus

Description

Not recommending this as a best practice or anything because there are a lot of inherent dangers on allowing your menu navigation to be changed by a simple publish/unpublish by a content contributor.  However, if this happens to fit a specific case need and your content publishers understand the responsibility involved, then here's how to make it happen.

First, create the content structure that you want to have drive a particular menu, next create an active menu link, but instead of having the menu link refer to an external/internal page, populate the code field with velocity as in the example below.

I did not include the Javascript or styling for making the menu look pretty, that would be up to you of course. :-)

Code

##This finds all the articles
#foreach($article in $dotcontent.pull("+structureName:Documentation +(conhost:48190c8c-42c4-46af-8d1a-0cd5db894797 conhost:SYSTEM_HOST)",0,"Documentation.title"))

##This finds out IF the article has at least one parent content, which would eliminate it as a Top level Article - we first want to print all top level Articles that have NO parent
 #set($parentContent = $dotcontent.pullRelated("Parent_Documentation-Child_Documentation","$article.identifier",true,1,"Documentation.title"))

##if the article has no parent, then it is top level lets print it and find the children
 	#if($parentContent.size()!=1)
 	#editContentlet($article.inode)
		 <h2>$article.title</h2>
		 
##finds/prints children of Top level parents only
		   #set($childContent = $dotcontent.pullRelated("Parent_Documentation-Child_Documentation","$article.identifier",false,0,"Documentation.title"))
		#if($childContent.size()>0)
			#foreach($child in $childContent)
				<h3>$velocityCount. $!{child.title}</h3>
			##You could keep searching for grandchildren at tertiary level using same methodology
			#end
		#end
	#end

#end