#* -------------------------------------------------------------- Global variables -- modify these as necessary to alter the behavior of the menu --------------------------------------------------------------- *# #set ( $maxMenuLevels = 3 ) #set ( $defaultPageName = "index" ) #* -------------------------------------------------------- DO NOT EDIT below this point -------------------------------------------------------- *# #* ----------------------------------------- Macros -- these MUST remain at the beginning of the file ----------------------------------------- *# #* setAssetName -- sets a global variable ($assetName) containing the best available name for the given asset. Looks, in order, for: display-name, title, system name. @param $asset -- a JDOM element representing a Cascade asset (i.e. system-page, system-folder, system-symlink, etc.) *# #macro ( setAssetName $asset ) #set ( $assetName = "" ) #if ( $asset.getChild("display-name") ) #set ( $assetName = $_SerializerTool.serialize($asset.getChild("display-name"),true).toUpperCase() ) #elseif ( $asset.getChild("title") ) #set ( $assetName = $_SerializerTool.serialize($asset.getChild("title"),true).toUpperCase() ) #else #set ( $assetName = $asset.getChild("name").value.toUpperCase() ) #end #end #* buildMenuItem -- Constructs the appropriate menu item link for the given asset. If the asset is a system-folder, this macro will recursively execute for all child assets of the folder, until reaching the $maxMenuLevels threshold defined in the global variable above. @param $asset -- a JDOM element representing a Cascade asset (i.e. system-page, system-folder, system-symlink, etc.) @param $topLevelItemNum -- the number of the top-level menu item under which this menu item resides. *# #macro ( buildMenuItem $asset $topLevelItemNum ) ## set the menu item display text -- $assetName #setAssetName ( $asset ) #set ( $id = "" ) #if ( $level == 1 ) #set ( $id = "id='item${topLevelItemNum}'" ) #end ## handle creation of menu item for folder assets #if ( $asset.getName().equals("system-folder") ) #set ( $folderIndex = false ) #set ( $folderIndex = $_XPathTool.selectSingleNode($asset,"system-page[name = '${defaultPageName}'] | system-symlink[name = '${defaultPageName}']") ) #* #set ( $href = "#" ) *# ## if the folder contains a landing page, set the href of the menu item to that page #if ( $folderIndex ) #set ( $href = $folderIndex.getChild("link").value ) #else #* if ( $level == $maxMenuLevel ) *# ## if we are at the last level, we will not have any child asset data ## in the index block, so if the folder has show-in-top-nav set to 'Yes' ## we will assume there is a landing page for the folder #set ( $href = $asset.getChild("link").value + "/${defaultPageName}" ) #end ## output the menu item for the folder itself #if ( $level == 1 ) #set( $subCheck = $subCheck - 1 )
${assetName} #else #if( $level == 2 )
${assetName} #elseif($level == 3)
  • ${assetName} #else
  • ${assetName}
  • #end #end ## if we have not reached the max menu level, recurse into child assets #if ( $level < $maxMenuLevels ) #set ( $folderFilter = "[system-page | system-symlink]" ) #if ( $level == ($maxMenuLevels - 1) ) ##set ( $folderFilter = "[system-page[name = '${defaultPageName}']]" ) #set ( $folderFilter = "" ) #end #set ( $children = $_XPathTool.selectNodes($asset,"system-folder[dynamic-metadata[name = 'show-in-top-nav']/value = 'Yes']${folderFilter} | system-page[name != '${defaultPageName}'][dynamic-metadata[name = 'show-in-top-nav']/value = 'Yes'] | system-symlink[dynamic-metadata[name = 'show-in-top-nav']/value = 'Yes'] | system-page[@reference]") ) ## if children exist, create a sub-menu wrapper #if ( $children.size() > 0 ) #set ( $divId = "" ) #if ( $topLevelItemNum == ($topLevelAssets.size() - 1) ) #set ( $divId = "id='lastnav'" ) #end ## increase the menu level for the submenu #set ( $level = $level + 1 )
      ## for each child asset, generate a menu item #foreach ( $child in $children ) #buildMenuItem ( $child $topLevelItemNum ) #end
    #set( $subCheck = 1 ) ## reset the menu level for any other items at this level #if($level == 3) #end #if($level == 2)
    #end #set ( $level = $level - 1 ) #end #end
    ## handle creation of menu item for page or external link assets #else #if ( $level == 1 )
  • ${assetName}
  • #else
  • ${assetName}
  • #end #end #end #* -------------------------------------- Main rendering construct -------------------------------------- *# ## defines the current menu level #set ( $level = 1 ) ## all top-level menu items #set ( $topLevelAssets = $_XPathTool.selectNodes($contentRoot,"/system-index-block/system-folder[dynamic-metadata[name = 'show-in-top-nav']/value = 'Yes'] | /system-index-block/system-page[dynamic-metadata[name = 'show-in-top-nav']/value = 'Yes'] | /system-index-block/system-symlink[dynamic-metadata[name = 'show-in-top-nav']/value = 'Yes']") ) [system-view:internal]
    ## used in setting correct ID value on top-level menu items -- i.e. "item0, item1, item2, etc." #set ( $topLevelCount = 0 ) #* Iterate through all top-level assets & build out the multi-level menu structure for each item *# #foreach ( $asset in $topLevelAssets ) ## call macro to render the menu item #buildMenuItem( $asset $topLevelCount ) ## increment count of top-level menu items #set ( $topLevelCount = $topLevelCount + 1 ) #end
    [/system-view:internal] [system-view:external] [/system-view:external]