По умолчанию, в theme_menu_tree()
нет никаких переменных кроме tree
, которая содержит отрендеренные элементы меню. Так получилось из-за того, что в препроцесс функции template_preprocess_menu_tree()
затирается всё, что лежит в $variables['tree']
(говнокод детектед):
function template_preprocess_menu_tree(&$variables) {
$variables['tree'] = $variables['tree']['#children'];
}
Решение:
/**
* Implements hook_theme_registry_alter().
*/
function MODULENAME_theme_registry_alter(&$theme_registry) {
array_unshift($theme_registry['menu_tree']['preprocess functions'], 'MODULENAME_prepreprocess_menu_tree');
}
/**
* Pre-preprocess fucntion for template_preprocess_menu_tree().
*/
function MODULENAME_prepreprocess_menu_tree(&$vars) {
$first_element_key = current(element_children($vars['tree']));
$first_element = $vars['tree'][$first_element_key];
$vars['menu_name'] = $first_element['#original_link']['menu_name'];
}
После этого в theme_menu_tree()
станет доступна переменная menu_name
:
/**
* Override theme_menu_tree().
*/
function THEMENAME_menu_tree($vars) {
$classes_array = array('menu', 'menu-' . $vars['menu_name']);
return '<ul class="' . implode(' ', $classes_array) . '">' . $vars['tree'] . '</ul>';
}
Написанное актуально для
Drupal 7
Добавить комментарий