Surcharger un menu dans un bloc

Traduction de la page http://drupal.org/node/988694
publiée / actualisée sur drupal.org le 1 Mars 2011


Créez une fonction override dans votre fichier template.php :

<?php
function themename_links__system_MENUNAME_menu($variables) {}
?>

Un paramètre $variables est passé et il contient un index nommé links. Chaque lien contient, entre autres, un href et un title.

A l'intérieur de votre fonction override, parcourez les liens :

<?php
foreach ($variables['links'] as $link) {}
?>

Si nous voulons juste afficher une balise <a>, sans utiliser Drupal, nous écririons normalement :

<?php
echo "<a href="{$link['href']}">{$link['title']}</a>";
?>

Cependant, Drupal dispose d'une fonction l() qui crée les liens pour nous. Il vaut mieux l'utiliser car elle traite les cas particuliers comme le lien <front>.

Aussi, nous ferons plutôt ça :

<?php
echo l($link['title'], $link['href'], $link);
?>

La fonction l() s'occupera d'ajouter une classe active si le lien est destiné à la page en cours.

Au finale, votre fonction override ressemblera à ceci :

<?php
function themename_links__system_MENUNAME_menu($variables) {
  
$output '';
  foreach (
$variables['links'] as $link) {
    
$output .= l($link['title'], $link['href'], $link);
  }
  return 
$output;
}
?>