Navigation. Without it, we'd all be lost. And yet, for many of us power-users site navigation can be something of an afterthought, with "a useful set of links" falling somewhere below "hackable urls" on our personal list of priorities. But if you're going to try and win over the browsing public, you'd better have a good menu system.
When dealing with simple brochureware or blog sites, Drupal core's menu module provides everything you need right out of the box. For design-heavy sites with a simple navigation tree, workable menus can be baked direct ly into the theme. However, keeping users oriented becomes increasingly important, and increasingly difficult, as your web-empire spreads and sprawls beyond what menu.module provides and what a designer can code into a theme file.
Songbirdnest.com is exhibit A of a growing web-empire, making use of Bugzilla, Trac, and Drupal to manage the online life of their open-source media player/browser mashup. With several sections, sub-sections and more in their site plan, we realized it was time to transcent theme-based tweaks and add some common-sense usability to Drupal's menu system:
- Menu Trails implements primary/secondary links which keep the current menu trail "active" or highlighted. A handy snippet ready to go into your template.php is included.
- The module provides a means of broadly categorizing nodes (by type or taxonomy) as falling "under" an existing menu item. These nodes are not added to the menu tree (keeping the menu admin system sane) but they will trigger the functionality above -- preserving navigation state for the user -- when viewed.
How is this useful? Compare:
Makes a big difference, right? After talking to pwonlan about this functionality in IRC, the theme layer part -- giving parent menu items a CSS class so they can be highlighted -- will likely be in Drupal core for version 6.0.
For now the module is checked into CVS. We're going to be doing a bit more tuning, and I want to see how feasible it would be to integrate somehow with views, so that nodes can be assigned to fall "under" any view which generates a menu item. I expect to package a 5.0 release later this week. Stay tuned to the project page for more on this.