Flexible Navigation Macro

Description

This macro is designed to wrap the stock navigation() macro such that it will default to the current location depth, with a default depth, both of which can be customized. Output is standard based on stock navigation() macro.

Basic Usage:

#customNavigation()

 

Advanced Usage:

#set($menuLevel = 4)
#set($menuDepth = 3)
#customNavigation() 

Code

${esc.hash}${esc.hash} ${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}
${esc.hash}${esc.hash} Macro Name: Flexible Navigation Macro
${esc.hash}${esc.hash} Version: 1.0
${esc.hash}${esc.hash} Author: Michael Fienen
${esc.hash}${esc.hash} Email: fienen@gmail.com
${esc.hash}${esc.hash} Description: Uses some extra logic to allow you to create custom navigation 
${esc.hash}${esc.hash}              from the stock nav macro
${esc.hash}${esc.hash}
${esc.hash}${esc.hash} Required Parameters:
${esc.hash}${esc.hash} - none
${esc.hash}${esc.hash}
${esc.hash}${esc.hash} Optional Parameters:
${esc.hash}${esc.hash} - ${esc.dollar}menuLevel = What level should navgation start at. Default: 2* (int)
${esc.hash}${esc.hash} - ${esc.dollar}menuDepth = How deep should the navigation pull. Default: 2 (int)
${esc.hash}${esc.hash}
${esc.hash}${esc.hash} * Note: Defaults to 2 unless current depth level > 2, then it defaults to the
${esc.hash}${esc.hash}         current page level.
${esc.hash}${esc.hash} ${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}${esc.hash}
${esc.hash}macro(customNavigation)
  ${esc.hash}${esc.hash} SEE IF THERE IS A USER SUBMITTED MENU LEVEL
  ${esc.hash}if(${esc.dollar}UtilMethods.isSet(${esc.dollar}menuLevel))
    ${esc.hash}set(${esc.dollar}level = ${esc.dollar}menuLevel)
  ${esc.hash}${esc.hash} OTHERWISE WE'LL CALCULATE IT BASED ON LOCATION
  ${esc.hash}else
    ${esc.hash}${esc.hash} FIND OUT WHAT THE CURRENT FOLDER DEPTH IS
    ${esc.hash}set(${esc.dollar}level = ${esc.dollar}listTool.size(${esc.dollar}request.getRequestURI().split("/")) - 1)
    ${esc.hash}${esc.hash} SET A MINIMUM LIMIT ON THE LEVEL 
    ${esc.hash}if(${esc.dollar}level < 2)
      ${esc.hash}set(${esc.dollar}level = 2)
    ${esc.hash}end
  ${esc.hash}end

  ${esc.hash}${esc.hash} SEE IF THERE IS A USER SUBMITTED DEPTH TO RENDER
  ${esc.hash}if(${esc.dollar}UtilMethods.isSet(${esc.dollar}menuDepth))
    ${esc.hash}set(${esc.dollar}depth = ${esc.dollar}menuDepth)
  ${esc.hash}${esc.hash} OTHERWISE DEFAULT TO TWO LEVELS DEEP 
  ${esc.hash}else
    ${esc.hash}set(${esc.dollar}depth = 2)
  ${esc.hash}end

  ${esc.hash}${esc.hash} RUN NAV MACRO WITH SPECIFIED LEVELS OR DEFAULTS
  ${esc.hash}navigation(${esc.dollar}!level ${esc.dollar}!depth)
${esc.hash}end