¿Cómo tema un bloque de menú?


11

He creado un menú personalizado (llamémoslo "mynav") y en mi tema he creado una plantilla específicamente para él ( block--menu--menu-mynav.tpl.php) que contiene:

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

Esto funciona bien

Sin embargo, preferiría aplicar la identificación a la lista desordenada que se genera y contiene $content. Supongo que necesito crear una función MYTHEME_links__system_mynav_menucomo esta:

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

pero no parece tener un efecto.

¿Qué estoy haciendo mal?


Probablemente sea un duplicado de drupal.stackexchange.com/questions/2258/…
tim.plunkett

1
La otra pregunta es sobre agregar una ID de menú única, mientras que esta pregunta es más genérica.
kiamlaluno

Pregunta exacta sobre stackoverflow: stackoverflow.com/questions/11935477/…
garras

Respuestas:


25

Para asignar un tema a la lista desordenada, debe llamar a theme_menu_tree (). Puede editar su template.php para llamar a esto.

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

Luego, si desea crear un tema para sus enlaces, llame a 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";
}

Ahora, el problema con Drupal 7 es que hay un error importante cuando se trata de mostrar el rastro activo de menús personalizados.

Consulte el problema
Problema n.o 520106: no hay forma de establecer dinámicamente la ruta activa
Problema n.o 942782: los menús personalizados nunca reciben una ruta activa

Básicamente no tienes suerte si quieres algunos menús personalizados verdaderos. Estos problemas son muy antiguos en la comunidad de drupal, por lo que no estoy seguro de si se solucionarán pronto. No sé si hay algún PHP que pueda ayudarlo. Puede recurrir a algunos módulos alternativos para facilitar la funcionalidad, como los atributos del menú y el bloqueo del menú . Ambos pueden ayudar a sortear el sistema de menú cruddy en Drupal 7.


2

Dentro de template.php de tu tema, esta era la forma de hacer cosas en Drupal 6

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

En Drupal 7 necesitas llamar

  function MYTHME_menu_link(array $variables) {

  }

MYTHEME_menu_linkparece que solo maneja los enlaces individuales. No puedo alcanzar el ul.
RoToRa

Lo estoy investigando, no sé si puedes más. Sé que con Drupal 7 tienes más poder sobre los enlaces, pero menos poder sobre los menús.
iStryker
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.