web-dev-qa-db-fra.com

Comment thématiser un bloc de menu?

J'ai créé un menu personnalisé (appelons-le "mynav") et dans mon thème, j'ai créé un modèle spécialement pour lui (block--menu--menu-mynav.tpl.php) qui contient:

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

Cela fonctionne bien.

Cependant, je préfère appliquer l'ID à la liste non ordonnée générée et contenue dans $content. Je suppose que je dois créer une fonction MYTHEME_links__system_mynav_menu comme ça:

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

mais cela ne semble pas avoir d'effet.

Qu'est-ce que je fais mal?

11
RoToRa

Afin de thématiser la liste non ordonnée, vous devez appeler theme_menu_tree (). Vous pouvez éditer votre template.php afin d'appeler cela.

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

Ensuite, si vous souhaitez créer un thème pour vos liens, appelez 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";
}

Maintenant, le problème avec Drupal 7 est qu'il y a un bug majeur quand il s'agit d'afficher la trace active des menus personnalisés.

Voir problème
problème # 520106 - aucun moyen de définir dynamiquement la piste active
Numéro # 942782 - Les menus personnalisés ne reçoivent jamais de trace active

Vous n'avez pas de chance si vous voulez de vrais menus personnalisés. Ces problèmes sont très anciens dans la communauté drupal donc je ne sais pas s'ils seront corrigés de si tôt. Je ne sais pas s'il y en a PHP = cela peut vous aider. Vous pouvez vous tourner vers des modules alternatifs pour faciliter la fonctionnalité, comme Attributs de men et Bloc de men . Ils peuvent tous deux aider à contourner le cruddy système de menus dans Drupal 7.

25
Steven

Dans le template.php de votre thème, c'était la façon de faire les choses dans Drupal 6

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

Dans Drupal 7 vous devez appeler

  function MYTHME_menu_link(array $variables) {

  }
2
iStryker