Menu active trail in Drupal 7

In Drupal 6 kreeg elk menu item wat een onderliggend actief item had automatisch de class "active-trail". In Drupal 7 is dat helaas niet zo. Of dit een bug is of gewenste functionaliteit zijn de geleerden nog niet over uit, maar ik heb gelukkig een oplossing kunnen schrijven. 

In de theme laag is het alsnog mogelijk om de active-trail class toe te voegen en wel op de volgende manier:

function theme_menu_link($variables) { 
  $element = $variables['element']; 
  $sub_menu = ''; 
  $active_items = array(); 
  
  foreach(menu_get_active_trail() as $a_menu) { 
    if(isset($a_menu['href'])) { 
      $active_items[] = $a_menu['href']; 
    } 
  } 

  if($element['#href'] == $_GET['q']) { 
    $element['#attributes']['class'][] = 'active-trail'; 
  }

  if(is_array($element['#below'])) {
    if(check_below($element['#below'], $active_items)) { 
      $element['#attributes']['class'][] = 'active-trail'; 
    } 
    
    $sub_menu = drupal_render($element['#below']); 
  } 

  $output = l($element['#title'], $element['#href'], $element['#localized_options']); 
  return '' . $output . $sub_menu . "\n"; 
}

function check_below($below, $active_items) { 
  $rw = false; 
  foreach ($below as $element) { 
    if (isset($element['#href']) && in_array($element['#href'], $active_items)) { 
      $rw = true; 
    }

    if (isset($element['#below']) && $rw == false) { 
      $rw = check_below($element['#below'], $active_items);
    } 
  } 
  return $rw; 
}
back_blog