Добавление класса или атрибута к меню

Опубликовано admin - вт, 09/25/2018 - 12:04

Добавление класса к меню обычно делается с помощью следующей функции:

function hook_menu_tree__main_menu($variables) {
  $list = '';
  if(variable_get('main_menu_list') && variable_get('main_menu_list') == 1) {
    $list = ' listmenu';
  }
  else {
    $list = '';
  }
  return '<ul class="menu' . $list . '">' . $variables['tree'] . '</ul>';
}

Однако если меню многоуровневое, то в таком случае указанный класс добавляется ко всем уровням меню, что не совсем красиво. Чтобы этого избежать (удалить класс во внутренних пунктах меню, или заменить его на какой-либо другой), необходимо выполнить следующий код:

/**
 * Implements theme_menu_link().
 */
function hook_menu_link(array $variables) {
  $element = $variables['element'];
  $sub_menu = '';
  if ($element['#below']) {
    // Wrap in dropdown-menu.
    unset($element['#below']['#theme_wrappers']);
    $sub_menu = '<ul class="menu">' . drupal_render($element['#below']) . '</ul>';
  }
  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

Заменив во второй функции класс у списка, мы поменяем его для всех дочерних элементов меню.

Разделы