Come tema un blocco di menu?


11

Ho creato un menu personalizzato (chiamiamolo "mynav") e nel mio tema ho creato un modello specifico per esso ( block--menu--menu-mynav.tpl.php) che contiene:

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

Funziona benissimo.

Tuttavia preferirei applicare l'id alla lista non ordinata che viene generata e contenuta $content. Immagino di dover creare una funzione MYTHEME_links__system_mynav_menucome questa:

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

ma non sembra avere un effetto.

Che cosa sto facendo di sbagliato?


Questo è probabilmente un duplicato di drupal.stackexchange.com/questions/2258/…
tim.plunkett

1
L'altra domanda riguarda l'aggiunta di un ID menu univoco, mentre questa domanda è più generica.
kiamlaluno

Domanda esatta su stackoverflow: stackoverflow.com/questions/11935477/…
artigli

Risposte:


25

Per creare un tema dell'elenco non ordinato, è necessario chiamare theme_menu_tree (). Puoi modificare template.php per chiamarlo.

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

Quindi, se vuoi creare un tema per i tuoi collegamenti, chiama 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";
}

Ora, il problema con Drupal 7 è che c'è un grosso bug nella visualizzazione della traccia attiva dei menu personalizzati.

Vedi il problema
Numero 520106 - Nessun modo per impostare dinamicamente la traccia attiva
Numero 942782 - I menu personalizzati non ricevono mai una traccia attiva

Sei praticamente sfortunato se vuoi dei veri menu personalizzati. Questi problemi sono molto presenti nella comunità dei drupal, quindi non sono sicuro che verranno risolti presto. Non so se ci sia del PHP che può esservi d'aiuto. Puoi passare ad alcuni moduli alternativi per facilitare la funzionalità, come Attributi menu e Blocco menu . Entrambi possono aiutare a aggirare il sistema di menu rozzo in Drupal 7.


2

All'interno del template.php del tuo tema, questo era il modo di fare le cose in Drupal 6

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

In Drupal 7 devi chiamare

  function MYTHME_menu_link(array $variables) {

  }

MYTHEME_menu_linksembra gestire solo i singoli collegamenti. Non riesco a raggiungere il ul.
RoToRa,

Ci sto esaminando, non so più se puoi. So che con Drupal 7 hai più potere sui collegamenti, ma meno potere sui menu.
iStryker,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.