Como tema de um bloco de menu?

11

Eu criei um menu personalizado (vamos chamá-lo de "mynav") e, no meu tema, criei um modelo específico para ele ( block--menu--menu-mynav.tpl.php) que contém:

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

Isso funciona bem.

No entanto, prefiro aplicar o ID à lista não ordenada gerada e contida $content. Eu acho que preciso criar uma função MYTHEME_links__system_mynav_menucomo esta:

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

mas não parece ter um efeito.

O que estou fazendo errado?

RoToRa
fonte
Provavelmente, é uma duplicata de drupal.stackexchange.com/questions/2258/…
tim.plunkett
1
A outra pergunta é sobre como adicionar um ID de menu exclusivo, enquanto essa pergunta é mais genérica.
kiamlaluno
Pergunta exata sobre stackoverflow: stackoverflow.com/questions/11935477/…
claws

Respostas:

25

Para criar um tema para a lista não ordenada, você precisa chamar theme_menu_tree (). Você pode editar seu template.php para chamar isso.

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

Então, se você deseja colocar um tema em seus links, chame 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";
}

Agora, o problema com o Drupal 7 é que há um erro grave na exibição da trilha ativa dos menus personalizados.

Veja a edição
# 520106 - Não há maneira de definir dinamicamente a trilha ativa
Edição # 942782 - Os menus personalizados nunca recebem uma trilha ativa

Você está basicamente sem sorte se quiser alguns menus personalizados verdadeiros. Essas questões existem há muito tempo na comunidade drupal, por isso não tenho certeza se elas serão corrigidas em breve. Não sei se existe algum PHP que possa ajudar com isso. Você pode recorrer a alguns módulos alternativos para facilitar a funcionalidade, como Atributos de Menu e Bloco de Menu . Ambos podem ajudar a contornar o sistema de menus do Drupal 7.

Steven
fonte
2

Dentro do template.php do seu tema, essa era a maneira de fazer as coisas no Drupal 6

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

No Drupal 7, você precisa ligar

  function MYTHME_menu_link(array $variables) {

  }
iStryker
fonte
MYTHEME_menu_linkparece lidar apenas com os links individuais. Eu não consigo alcançar o ul.
RoToRa
Estou investigando, não sei se você pode mais. Eu sei que com o Drupal 7 você tem mais poder sobre os links, mas menos poder sobre os menus.
IStryker