xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Уникальные классы пунктов меню

Опубликовано в

У системных меню, выведенных в page.tpl.php с помощью theme_links() есть приятная особенность — все пункты обладают уникальным css классом на основе их идентификатора. В меню же, выводимых модулем Block, таких классов увы нет. Решаем проблему:

// template.php
 
/**
 * Implements hook_preprocess_menu_link().
 */
function THEMENAME_preprocess_menu_link(&$vars) {
  $vars['element']['#attributes']['class'][] = 'menu-item-' . $vars['element']['#original_link']['mlid'];
}

Результат:

DOM

Написанное актуально для Drupal 7
Похожие записи

Комментарии RSS

Спасибо! Как раз то что нужно. А как можно добавить класс для активного пункта меню?

сравнивайте текущий адрес с $vars['element']['#href']

Спасибо тебе большое, ты меня очень выручил. Респект. Долгих тебе лет жизни....

Спасибо! полезно.

Спасибо!

Перерыл весь интернет. Решение, похоже, есть только на jQuery. Каким образом можно задавать различные классы уровням меню - ul?

/**
 * Implements hook_theme_registry_alter().
 */
function MODULENAME_theme_registry_alter(&$theme_registry) {
  array_unshift($theme_registry['menu_tree']['preprocess functions'], 'MODULENAME_prepreprocess_menu_tree');
}
 
/**
 * Preprocess fucntion for theme_menu_tree().
 */
function MODULENAME_prepreprocess_menu_tree(&$vars) {
  $first_element_key = current(element_children($vars['tree']));
  $vars['menu_depth'] = $vars['tree'][$first_element_key]['#original_link']['depth'];
}

после этого в theme_menu_tree() станет доступна переменная menu_depth

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании