Добавить класс в верхний уровень ul с помощью menu_block

Я использую модуль блока меню для создания своих основных и вспомогательных навигационных систем. Я хочу добавить класс в ul для только верхнего уровня главного навигатора .

Как я понимаю, я могу сделать что-то вроде этого:

function theme_menu_tree__menu_block($variables) {
  return '<ul class="my classes">' . $variables['tree'] . '</ul>';
}

или это:

function theme_menu_tree__menu_block__main_menu($variables) {
  return '<ul class="my classes">' . $variables['tree'] . '</ul>';
}

Тем не менее, это, кажется, обертывает каждый уровень навигации вышеупомянутым html. Как я могу ограничить модификацию первого уровня?

Не похоже, что мне дано много данных в $variables. Я что-то пропустил?

6 голосов | спросил John Bubriski 11 Jpm1000000pmFri, 11 Jan 2013 19:46:30 +040013 2013, 19:46:30

3 ответа


8

Вот трюк: theme_menu_tree__MENU_NAME () и theme_menu_link ().

<?php
/**
 * Implements theme_menu_tree().
 */
function THEMENAME_menu_tree__MENU_NAME(&$variables) {
  return '<ul class="FIRST-LEVEL-CLASS">' . $variables['tree'] . '</ul>';
}

/**
 * Implements theme_menu_link().
 */
function THEMENAME_menu_link__MENU_NAME(array $variables) {
  $element = $variables['element'];
  $sub_menu = '';

  if ($element['#below']) {
    // Wrap in dropdown-menu.
    unset($element['#below']['#theme_wrappers']);
    $sub_menu = '<ul class="OTHER-LEVEL-CLASS">' . 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";
}
?>
ответил arshadcn 21 AMpSun, 21 Apr 2013 00:58:14 +040058Sunday 2013, 00:58:14
1

$variables дает мне:

array(3) {
  ["tree"]=> string(n) "HTML for the sub-tree"
  ["theme_hook_suggestion"]=> string(n) "menu_tree__menu_block__main_menu"
  ["theme_hook_suggestions"]=> array(0) { }
}

Это выглядит довольно плохо, но я мог бы выполнить строковый поиск, чтобы увидеть, содержит ли меню текст для одного из моих элементов верхнего уровня:

<?php

function theme_menu_tree__menu_block__main_menu($variables) {
  if (!stripos($variables['tree'], 'home')) {
    return '<ul>' . $variables['tree'] . '</ul>';
  } else {
    return '<ul class="my classes">' . $variables['tree'] . '</ul>';
  }
}

?>
ответил John Bubriski 11 Jpm1000000pmFri, 11 Jan 2013 20:01:52 +040013 2013, 20:01:52
0

Возможно, вас заинтересует недавнее сообщение в блоге о это сообщение в блоге от Koumbit :

  

Я добавил следующий код в template.php моей темы, чтобы сделать   как стандартное меню пользователя, так и наше пользовательское меню для анонимных пользователей   используйте Drupal для создания встроенных ссылок:

theme_links

Но я думаю, что вам действительно нужно изучить тему YOURTHEME_links__system_main_menu() и посмотреть, как это или как <?php print theme('links__system_main_menu', array('links' => $main_menu, 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix', 'main-menu')), 'heading' => array('text' => t('Main menu'),'level' => 'h2','class' => array('element-invisible')))); ?> отображает главное меню, каждая тема отличается.

Оба /** * Make the user menu inline */ function customtheme_menu_tree__user_menu($variables) { return '<ul class="links inline clearfix">' . $variables['tree'] . '</ul>'; } и region-menu.tpl.php render Устанавливает (коллекции) ссылок. Различные тестеры используют разные функции в одном и том же конце.

Другой модуль, который поможет вам понять это, Devel и Devel_Themer . Переключитесь на devel_themer и выберите главное меню, и оно сообщит вам, что используется функция theme_function, и использовать файл .tpl (и переопределяет).

ответил tenken 11 Jpm1000000pmFri, 11 Jan 2013 20:19:59 +040013 2013, 20:19:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132