2010-06-09 14 views
2

當我在Drupal中啓用一個新菜單(例如,mymodule)時,Drupal應該能夠從mymodule_menu(hook_menu)獲取菜單項,處理項目並插入菜單項menu_router和menu_links表。Drupal 6無法構建菜單路由器和鏈接

但是,我的Drupal沒有這樣做。每當我啓用一個模塊(由我編寫或由他人貢獻的模塊或核心模塊)時,Drupal似乎並沒有獲得新的信息。在新啓用的模塊中定義的菜單項不會被處理並插入到Drupal的菜單系統中。這意味着新啓用的模塊無法工作 - 因爲它無法訪問。

我確實通過手動將新模塊的菜單項信息插入到menu_router和menu_links表中,並且新菜單開始工作。但是,如果我每次啓用模塊都必須這樣做,這是一場噩夢。

任何人都有過同樣的問題?如何解決這個問題?

預先感謝您。

回答

1

我不會使用任何SQL來與菜單表交互,如果您編輯錯誤的記錄,可能會發生一些令人討厭的事情。

您的hook_menu代碼中必須有錯誤。你可以粘貼它嗎?

此外,如果您正在開發具有菜單條目的模塊,我發現它的方便調用mymodule_init的加時/刪除鏈接內()這兩個函數:

cache_clear_all() 
menu_router_build() 

這將刷新所有高速緩存並重建菜單和任何調用hook_menu。如果它之後沒有出現,那麼你的代碼有一個錯誤。我想看看它。

0

你沒有報告你在使用哪個Drupal版本,但在Drupal 6中,hook_menu()的實現不會被調用,如果不是在某些場合(如安裝模塊或執行模塊更新時) )。

如果模塊改變菜單的回調,但它不是一個更新來執行,你可以添加包含以下代碼的更新功能:

// 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); 
    } 
} 

的變量是從的index.php檢查,如果它的值是TRUE,那麼Drupal會自動重建菜單。