Темизация меню

Мы знаем, что меню в Drupal можно выводить как блок или кодом в шаблоне. При выводе кодом, пунктам меню присваиваются уникальные классы, но не показываются пункты подменю для текущего.
При выводе меню в виде блока, пункты подменю отображаются, но не выводятся уникальные классы. Решение довольно простое:

Для варианта с кодом в странице:
Используем хук preprocess_page

  1. function mytheme_preprocess_page(&$vars) {
  2.  
  3. $pid = variable_get('menu_main_links_source', 'main-menu');
  4. $tree = menu_tree($pid);
  5.  
  6. foreach ($tree as $key => $value) {
  7. if (is_numeric($key)) {
  8. $tree[$key]['#attributes']['class'][] = 'menu-'.$key;
  9. }
  10. }
  11.  
  12. $vars['my_themed_menu'] = render($tree); //где my_themed_menu - имя переменной, которая будет доступна в шаблоне
  13. }

Теперь в самом шаблоне в нужном нам месте выводим наше меню:

  1. <?php print $my_themed_menu; ?>

Для варианта с выводом блоком:
используем хук preprocess_menu_link

  1. function mytheme_preprocess_menu_link(&$vars) {
  2. $vars['element']['#attributes']['class'][] = 'menu-' . $vars['element']['#original_link']['mlid'];
  3. }