Load a full menu with active trail I need to load a full menu for navigation in a custom theme with active trail, and can't find any way to do it, but that can't be right.  I can't imagine such an obvious and widespread use-case having no core support, but I've scoured menu.inc and found nothing.  The functions offered range from inadequate (no active trail) to completely unusable (menu is missing children for the CSS dropdowns/submenus outside the active trail, and even empty when needed most, such as on broken links).

I've tried using the following functions in my THEME_preprocess_page hook:


menu_tree (only renders siblings of the active trail--the navbar can even end up empty)
menu_tree_page_data (same result)
menu_tree_all_data (contrary to the documentation--luckily--this method does not return hidden items, but there's no active trail)


So far as I can tell, my only options are to copy and rewrite several functions from menu.inc, or to load two separate menus and apply deep analysis/merging to find and duplicate the active trail from the incomplete menu into the complete one--and this is just as bad because the data structures don't match.  Is there no other way to get a full menu with active trail?

Also, what if I do go with the latter option using menu_tree_all_data?  Will I end up exposing links that aren't properly going through access checks, or have similar issues?  How the heck does Drupal itself load a full menu, like the Navigation menu which doesn't go away while visiting other parts of the site?

I did find another nearly identical question but no one answered it and that was 9 months ago.  This is for a project that's already running well behind schedule due pretty much exclusively to unforseen Drupal-related issues, so any pointers are much appreciated.

EDIT: Whoops...tried to be thorough and missed a major detail :P  I'm on Drupal 7.
I just want to add my experience to the lot. I had similar issues using Drupal menu. The solution I used is:

Set all menu items with children to &quot;Expanded&quot;. This as to be done manually: Structure &gt; Menus &gt; List links, edit links which has children, check the Show as expanded checkbox.
Use menu_tree_page_data function (example: $menu_tree = menu_tree_page_data('main-menu')) to get the menu, with all its children AND with active trail.
Create a renderable array using menu_tree_output function (example: $renderable_array = menu_tree_output($menu_tree)) to prepare the menu for rendering.
Use the renderable array as content for my custom block, but you could call drupal_render($renderable_array) to get the rendered HTML representing the menu.