Как оформить тематику блока меню?

11

Я создал собственное меню (давайте назовем его «mynav»), и в своей теме я создал шаблон специально для него ( block--menu--menu-mynav.tpl.php), который содержит:

<div id="mynav" class="<?php print $classes; ?>"<?php print $attributes; ?>>
  <?php print $content ?>
</div>

Это отлично работает.

Однако я бы предпочел применить идентификатор к неупорядоченному списку, который создается и содержится в $content. Я думаю, мне нужно создать такую ​​функцию MYTHEME_links__system_mynav_menu:

function MYTHEME_links__system_mynav_menu($variables) {
  return "TEST"; // Generate HTML here (<ul id="mynav">...)
}

но, похоже, это не влияет.

Что я делаю неправильно?

Rotora
источник
Вероятно, это дубликат drupal.stackexchange.com/questions/2258/…
tim.plunkett
1
Другой вопрос касается добавления уникального идентификатора меню, в то время как этот вопрос является более общим.
kiamlaluno
Точный вопрос о stackoverflow: stackoverflow.com/questions/11935477/…
когти

Ответы:

25

Чтобы создать тему неупорядоченного списка, вам нужно вызвать theme_menu_tree (). Вы можете отредактировать ваш template.php, чтобы вызвать это.

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

Затем, если вы хотите создать тематику для своих ссылок, вызовите theme_menu_link ().

function THEMENAME_menu_link__MENUNAME($variables) {
  $element = $variables['element'];
  $sub_menu = '';

  if ($element['#below']) {
    $sub_menu = drupal_render($element['#below']);
  }
  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

Теперь проблема с Drupal 7 заключается в том, что существует серьезная ошибка при отображении активного следа пользовательских меню.

См. Выпуск
Проблема № 520106 - Нет способа динамически установить активный след
Проблема № 942782 - Пользовательские меню никогда не получают активный след

Вам в основном не повезло, если вы хотите настоящие пользовательские меню. Эти проблемы очень давно существуют в сообществе друпалов, поэтому я не уверен, будут ли они исправлены в ближайшее время. Я не знаю, есть ли какой-нибудь PHP, который может помочь с этим. Вы можете обратиться к некоторым альтернативным модулям для того , чтобы помочь облегчить functionaltiy, как меню Attributes и меню блок . Они оба могут помочь обойти систему грубого меню в Drupal 7.

Стивен
источник
2

В template.php вашей темы это был способ сделать что-то в Drupal 6

function MYTHEME_links__system_mynav_menu($variables) {
  return "TEST"; // Generate HTML here (<ul id="mynav">...)
}

В Drupal 7 нужно позвонить

  function MYTHME_menu_link(array $variables) {

  }
iStryker
источник
MYTHEME_menu_linkкажется, обрабатывать только отдельные ссылки. Я не могу добраться до ul.
RoToRa
Я смотрю на это, я не знаю, сможешь ли ты больше. Я знаю, что с Drupal 7 у вас больше власти над ссылками, но меньше над меню.
iStryker