it-swarm.it

Come tema un blocco di menu?

Ho creato un menu personalizzato (chiamiamolo "mynav") e nel mio tema ho creato un modello appositamente 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 è generata e contenuta in $content. Immagino di dover creare una funzione MYTHEME_links__system_mynav_menu come questo:

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?

11
RoToRa

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 bug importante quando si tratta di visualizzare la traccia attiva dei menu personalizzati.

Vedi 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à drupal, quindi non sono sicuro che verranno risolti in qualunque momento presto. Non so se ci sono alcuni PHP = che può aiutarti. Puoi passare ad alcuni moduli alternativi per facilitare la funzionalità, come Attributi men e Blocco men . Entrambi possono aiutare a aggirare il rozzo sistema di menu in Drupal 7.

25
Steven

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) {

  }
2
iStryker