2010-06-09 28 views
2

Lorsque j'accepte un nouveau menu dans Drupal (par exemple, mymodule), Drupal devrait pouvoir récupérer les éléments du menu mymodule_menu (hook_menu), traiter les éléments et insérer les éléments du menu à la table menu_router et menu_links.Drupal 6 ne parvient pas à construire le menu routeur et liens

Cependant, mon Drupal ne parvient pas à le faire. Chaque fois que j'active un module (écrit par moi ou des modules fournis par d'autres, ou des modules de base), Drupal ne semble pas obtenir les nouvelles informations. Les éléments de menu définis dans le module nouvellement activé ne sont pas traités et insérés dans le système de menus de Drupal. Cela signifie que le module nouvellement activé n'a aucune chance de fonctionner, car il est inaccessible. J'ai corrigé cela en insérant manuellement les informations de l'élément de menu pour le nouveau module dans la table menu_router et menu_links et le nouveau menu a commencé à fonctionner. Mais c'est un cauchemar si je dois le faire chaque fois que j'active un module.

Quelqu'un at-il déjà eu le même problème? Comment régler ceci?

Merci d'avance.

Répondre

1

Je n'utiliserais aucun SQL pour interagir avec les tables de menu, quelque chose de méchant pourrait se produire si vous éditez le mauvais enregistrement.

Vous devez avoir une erreur dans votre code hook_menu. Pouvez-vous le coller?

En outre, si vous développez un module qui comporte des entrées de menu, je trouve que sa pratique d'appeler ces deux fonctions à l'intérieur de mymodule_init() lors de l'ajout/liens suppression:

cache_clear_all() 
menu_router_build() 

Cela videra tout cache et reconstruire le menu et tout ce qui appelle hook_menu. Si cela n'apparaît pas après cela, votre code a un bug. J'aimerais le voir.

0

Vous n'avez pas indiqué quelle version de Drupal utilisez-vous, mais dans Drupal 6, les implémentations de hook_menu() ne sont pas invoquées, si ce n'est pas dans certains cas (lorsqu'un module est installé ou lorsque des modules sont exécutés, par exemple).

Si votre module modifié les callbacks de menu, mais il n'a pas une mise à jour à exécuter, vous pouvez ajouter une fonction de mise à jour contenant le code suivant:

// Change the name of the function to match the module name. 
// Change the update number to the correct one for your case. 
function custom_module_update_6201() { 
    if (!variable_get('menu_rebuild_needed', FALSE)) { 
    variable_set('menu_rebuild_needed', TRUE); 
    } 
} 

La variable est vérifiée à partir index.php, et si sa valeur est TRUE, puis Drupal reconstruira automatiquement les menus.