Index: menu.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/menu.inc,v
retrieving revision 1.375
diff -u -r1.375 menu.inc
--- menu.inc	14 Jan 2010 13:45:33 -0000	1.375
+++ menu.inc	24 Jan 2010 22:47:40 -0000
@@ -1055,6 +1055,30 @@
 }
 
 /**
+ * Set a page's menu parent dynamically. 
+ * @param $path
+ *   system path - must refer to an existing menu item
+ * @return
+ *   the last path that was set
+ */
+function menu_set_dynamic_parent($path = null) {
+  static $parent_path; 
+  if($path) {
+    $parent_path = $path;
+  }
+  return $parent_path;
+}
+
+/**
+ * Return a dynamic parent set for a page.
+ * @return
+ *   a system path.
+ */
+function menu_get_dynamic_parent() {
+  return menu_set_dynamic_parent();
+}
+
+/**
  * Get the data structure representing a named menu tree, based on the current page.
  *
  * The tree order is maintained by storing each parent in an individual
@@ -1103,6 +1127,15 @@
           if (drupal_is_front_page()) {
             $args[] = '<front>';
           }
+          
+          // check for dynamic parent paths
+          if($dynamic_parent = menu_get_dynamic_parent()) {
+            $args[] = $dynamic_parent;
+          }
+          
+          // Allow modules to alter the path in $args so they can dynamically trail to a parent.
+          drupal_alter('menu_trail', $args);
+          
           $parents = db_select('menu_links')
             ->fields('menu_links', array(
               'p1',
