|Version 20 (modified by anonymous, 4 years ago) (diff)|
Hierarchical navigation menus
- Add items to navigation menus
- Hierachical organization (using Superfish)
PS: - CSS work might be needed to fit your trac theme.
See it in action: http://code.optaros.com/trac/oforge/
If you have any issues, create a new ticket.
As usual, configuration takes place in the trac.ini file. Most interesting things first - they are to be found in the [mainnav] section: Here you set up your menu items. Syntax is: <item_name>.<property> = <value> - where <item_name> is either the already existing handler (e.g. "wiki" for the wiki item, "tickets" for the tickets, "newticket" for the "New Ticket" item, a.s.o.) - or a term which must not exist for a brand new item to be introduced (as e.g. the "Team Tools" in the Examples section). A special case is e.g. top to make a new item appearing on top level.
Defining your menus in the [mainnav] section
So here come the available properties and their possible values:
|parent||Make the item a sub-item to the one mentioned as value||top|
|label||What should be written on the "button"||Team Tools|
|href||Where the item should link to||/report/1|
|enabled||Must be set to 1 for self defined items to be shown. Can be set to 0 to (temporarily) disable an item.||1|
|hide_if_no_children||Don't display this (sub) menu if it has no children (e.g. the current user lacks the privileges for all sub-items)||1|
|perm||For items like reports, hide_if_disabled does not work, since this is no component. Though, it should not be displayed if it is not available. So you can handle this by defining the required permission.||REPORT_VIEW|
|order||Move an item to the left/right. By default, all items have an order of 999 (who will ever reach 999 items must have done something wrong, really!). Use values from 1..999 to define positions. Use a negative value for an item you want to make sure it always comes first - and a value larger than 999 if it sould always come last.||5|
|path_info||String to be matched with the request path info to decide whether a menu item should be displayed. Useful for context dependent items (e.g. in the ctxnav)||/wiki|
- inherit: Useful when a menu should receive items from another menu
# dummy example - add mainnav items to context menu. [ctxtnav] inherit= mainnav
Defining the behaviour in the [menu-custom] section
Here you can (re-)define (i.e. customize) the behavior of MenusPlugin. Usually, you won't need that - since the defaults are fine. But in case you need a toy to play with - here we go:
Syntax is quite easy, it's just <option> = <value>. Available options are:
|managed_menus||Which menus should be maintained by the plugin.||mainnav,metanav|
|serve_ui_files||Whether the required UI files (i.e. *.js and *.css files) should be linked into the page. Boolean value.||1|
The serve_ui_files option you will only need to override if you want to apply your own styles and need to suppress the original ones for this. Rare case - but who knows?
... [components] tracmenus.* = enabled [mainnav] # Create a new top-level element for "Team Tools" - make sure to set it to "enabled" or it doesn't show up! teamtools = enabled teamtools.parent = top teamtools.label = Team Tools # Do not display this menu if it has no children (e.g. visitor has no permission to any) teamtools.hide_if_no_children = 1 # Now add the discussion plugin here discussion = enabled discussion.parent = teamtools # Add the worklog here as well worklog.parent = teamtools # Add more things... ... # rename "Browse Source" to "Code" browser.label = Code # Add some entry points to the code browser code_trunk = enabled code_trunk.parent=browser code_trunk.href=/browser/trunk code_trunk.label=Trunk # this is no component - so to hide it if not available, we need a trick code_trunk.perm = BROWSER_VIEW # Add some reports to the ticket item special_report = enabled special_report.parent=tickets special_report.href=/report/7 special_report.label=My Tickets # same trick as above required here special_report.perm=REPORT_VIEW # Some more things wiki.parent=top browser.parent=top # unassigned is a reserved keyword: # - if present, all other items not specified in config section will appear as sub-items under unassigned item. # - if not present, all other items will appear as top items. unassigned = enabled unassigned.href=/wiki unassigned.label=Tools ... # Make sure the Wiki is always the first item - and Admin always the last: wiki.order = -999999 admin.order = 999999
-  by rjollos on 2012-10-11 02:42:02
Refs #10133: Added else case so that logic is the same as before .
-  by rjollos on 2012-10-11 02:31:51
Refs #10133: Removed unnecessary continue statements.
-  by rjollos on 2012-10-11 02:26:10
Fixes #10133: Don't show entries in the navigation bar if a label with a link element is not defined.