Voilà, voilà... Fin de l'aventure...

 

Fermeture de kolossaldrupal.org dans...


Bonjour tout le monde,

Drupal évolue, les versions changent et Kolossaldrupal.org était essentiellement consacré à la version 6 de Drupal.

Autant dire que les infos présentées ici commencent à dater...

Faute de temps, je ne peux plus garder le site Kolossaldrupal à jour...

Je vous aurais bien proposé de reprendre le flambeau mais... c'est tellement simple de nos jours de se faire son propre site à soi...Pourquoi s'embêter alors ? :-)

Ce site restera donc en l'état, tel qu'il était en 2011...

Ah la la ! Cela ne nous rajeunit pas !

Manuel Vila - Avril 2016

Mettre à jour votre système de menu de Drupal 5.x à Drupal 6.x

Référence en anglais sur drupal.org : 7 Août 2008 - 14h20
http://drupal.org/node/103114


Section en cache

C'est très simple, un simple rechercher-remplacer. Voici la liste des modifications :

  • hook_menu() ne prend plus de paramètres (ôtez $may_cache)
  • La valeur de path est le nouvel index pour $items.
  • callback devient page callback.
  • callback arguments devient page arguments.
  • access devient access callback et access arguments.

    Par exemple, access => user_access('administer nodes') devient 'access callback' => 'user_access', 'access arguments' => array('administer nodes')

    Cependant, la valeur par défaut pour 'access callback' est 'user_access', vous pouvez donc l'ignorer.

    Tout ce qui concerne les accès un peu compliqués doit être déplacé dans une fonction appelée en runtime, user_is_anonymous et use_is_logged_in sont des auxiliaires bien utiles. Voir Contrôle d'accès pour plus d'informations à ce sujet.

  • Les argument titre et description ne doivent pas avoir de chaînes dans un appel à t(), car leur traduction s'effectue dans le système de menu à une étape ultérieure. Cela permet la traduction des éléments de menu vers n'importe quelle langue requise par le site, en fonction de la langue utilisée dans la page.

Section non en cache

Supposons que vous ayez :

<?php
/**
* Implementation of hook_menu().
*/
function aggregator_menu($may_cache) {
  if (!
$may_cache) {
    if (
arg(0) == 'aggregator' && is_numeric(arg(2))) {
      if (
arg(1) == 'sources') {
        
$feed aggregator_get_feed(arg(2));
        if (
$feed) {
          
$items[] = array('path' => 'aggregator/sources/'$feed['fid'] .'/configure',
            
'title' => t('Configure'),
            
'callback' => 'drupal_get_form',
            
'callback arguments' => array('aggregator_form_feed'$feed),
            
'access' => user_access('administer news feeds'),
            
'type' => MENU_LOCAL_TASK,
            
'weight' => 1);
        }
      }
    }
  }

  return 
$items;
}
?>

Cela devient :

<?php
/**
* Implementation of hook_menu().
*/
function aggregator_menu() {
  
$items['aggregator/sources/%aggregator_feed/configure'] = array(
    
'title' => 'Configure',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('aggregator_form_feed'2),
    
// NOTE: as of Drupal 6.2, all menu items are *required* to have
    // access control.
    
'access arguments' => array('administer news feeds'),
    
'type' => MENU_LOCAL_TASK,
    
'weight' => 1,
  );

  return 
$items;
}
?>

Si nous voulons juste utiliser le signe pourcentage aggregator/sources/%/configure il remplacera toute valeur, y compris des valeurs non numériques comme aggregator/sources/foo/configure. Cependant, avec %aggregator_feed on sollicite un feed basé sur le troisième argument et tout ce qui n'est pas un feed valide aboutira à une page 404.

L'utilisation des caractères jokers, les boucles foreach() et MENU_ITEMs

Dans Drupal 5, nous utilisions des boucles foreach() pour déclarer récursivement plusieurs MENU_ITEM ou MENU_SUGGESTED_ITEM.

Dans Drupal 6, nous n'avons besoin que d'une entrée dans hook_menu() avec un caractère joker adéquat. En outre, vous pouvez créer autant d'éléments de menu que souhaité (activés ou pas) avec menu_link_save().

Pour uns discussion détaillée à ce sujet, voir ce sujet.

Additional Run Once Code

Tout code étranger aux menus qui était placé dans hook_menu !$may_cache pour être exécuté durant l'initialisation, doit maintenant être déplacé dans hook_init. Auparavant nous appelionshook_init deux fois, une fois au début du processus bootstrap, une deuxième juste après la fin du bootstrap. La première instance est désormais appelée boot au lieu de init.

Si vous utilisiez une boucle dans votre code de menu alors vous aurez probablement besoin de menu_link_save.

Un exemple horriblement complexe peut être trouvé dans le menu de http://drupal.org/files/issues/akismet.d6-port.patch. Il présente à peu près toutes les manipulations dont on pourrait avoir besoin pour le chemin akismet/%akismet/%/'. $op. Il passe le vrai callback page dans $map[0] ça fait un peu hack mais c'est aussi plutôt utile.