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

Задача на первый взгляд простая, но не решаемая существующими на данный момент модулями — задать определенному меню свой id и class.

Здесь мы не рассматриваем вариант выведения меню в шаблоне page.tpl.php, где можно прописать любой id, по причине того, что такой метод отображения меню не выводит вложенные пункты, только первый уровень.

Итак решение на примере главного меню (main-menu)

  1. function amiweb_menu_tree__main_menu($variables){
  2.   return '<ul class="your-custom-class" id="your-custom-id">' . $variables['tree'] . '</ul>';
  3. }

Здесь всё довольно-таки просто и понятно, можно так-же использовать function amiweb_menu_tree, но тогда внутри придется сделать проверку на имя меню.

Если же мы хотим темизировать сами ссылки, то нужно использовать theme_menu_link(). Вот небольшой пример:

  1. function THEMENAME_menu_link__MENUNAME($variables) {
  2.   $element = $variables['element'];
  3.   $sub_menu = '';
  4.  
  5.   if ($element['#below']) {
  6.     $sub_menu = drupal_render($element['#below']);
  7.   }
  8.   $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  9.   return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
  10. }