Wie kann man einen Menüblock thematisieren?

11

Ich habe ein benutzerdefiniertes Menü erstellt (nennen wir es "mynav") und in meinem Thema eine Vorlage speziell dafür erstellt ( block--menu--menu-mynav.tpl.php), die Folgendes enthält:

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

Das funktioniert gut.

Ich würde es jedoch vorziehen, die ID auf die ungeordnete Liste anzuwenden, die generiert und enthalten ist $content. Ich denke, ich muss eine Funktion MYTHEME_links__system_mynav_menuwie diese erstellen :

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

aber es scheint keinen Einfluss zu haben.

Was mache ich falsch?

RoToRa
quelle
Dies ist wahrscheinlich ein Duplikat von drupal.stackexchange.com/questions/2258/…
tim.plunkett
1
Die andere Frage betrifft das Hinzufügen einer eindeutigen Menü-ID, während diese Frage allgemeiner ist.
Kiamlaluno
Genaue Frage zu Stackoverflow: Stackoverflow.com/questions/11935477/…
Krallen

Antworten:

25

Um die ungeordnete Liste zu thematisieren, müssen Sie theme_menu_tree () aufrufen. Sie können Ihre template.php bearbeiten, um dies aufzurufen.

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

Wenn Sie dann Ihre Links thematisieren möchten, rufen Sie theme_menu_link () auf.

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";
}

Das Problem mit Drupal 7 ist nun, dass es einen großen Fehler gibt, wenn es darum geht, die aktive Spur von benutzerdefinierten Menüs anzuzeigen.

Siehe Problem
Ausgabe Nr. 520106 - Keine Möglichkeit, aktiven Pfad dynamisch
festzulegen Problem Nr. 942782 - Benutzerdefinierte Menüs erhalten niemals einen aktiven Pfad

Sie haben im Grunde kein Glück, wenn Sie echte benutzerdefinierte Menüs möchten. Diese Probleme sind in der Drupal-Community seit langem bekannt, daher bin ich mir nicht sicher, ob sie bald behoben werden. Ich weiß nicht, ob es PHP gibt, das dabei helfen kann. Sie können sich an einige alternative Module wenden, um die Funktionalität zu vereinfachen, z. B. Menüattribute und Menüblock . Beide können helfen, das grobe Menüsystem in Drupal 7 zu umgehen.

Steven
quelle
2

In der template.php Ihres Themas war dies die Möglichkeit, Dinge in Drupal 6 zu tun

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

In Drupal 7 müssen Sie anrufen

  function MYTHME_menu_link(array $variables) {

  }
iStryker
quelle
MYTHEME_menu_linkscheint nur die einzelnen Links zu behandeln. Ich kann das nicht erreichen ul.
RoToRa
Ich schaue hinein, ich weiß nicht, ob du es noch kannst. Ich weiß, dass Sie mit Drupal 7 mehr Macht über die Links haben, aber weniger Macht über die Menüs.
iStryker