2012-02-22 110 views
2

的菜單項與我的自定義drupal模塊我試圖插入添加菜單項使用hook_menu()菜單項。 它應顯示鏈接到用戶配置文件的用戶名。 (我的任務可能類似於Add menu item/link to Drupal menu (programatically?)如何添加我的自定義Drupal 7-模塊

[編輯:]我試圖解決以下任務,但它可能是,它的錯誤的方式來做到這一點..

function mymodule_view_user_page() 
{ 
    global $user; 
    if ($user->uid != 0) { 
    /*$items = array(
     'link_path' => drupal_get_normal_path('user'), 
     'link_title' => 'Account', 
     'menu_name' => 'main-menu', 
     'weight'  => 8, 
    );*/ 

    $items['user'] = array(
     'title'   => 'Page name', 
     'description'  => t('Account'), 
     'menu_name'  => 'main-menu', 
     'weight'   => 8, 
     'access callback' => TRUE, 
     'page callback' => 'mymodule_view_user_page', 
     'access arguments' => array('view own profile'), // permission 
     'type' => MENU_NORMAL_ITEM, 

    ); 
    return $items; 
    } 
} 

function mymodule_view_user_page_view_user_page() 
{ 
    drupal_goto('user'); 
} 

隨着上面的代碼沒有任何顯示,但也沒有錯誤..

我可能不想使用page callback因爲該頁面已經正確存在,但我不確定關於不設置它。

hook_menu()文檔頁hook_menu確實廣泛,但看來我不理解是否正確,並開始鬆動毛過吧..

謝謝你的提示! PP

+0

我想我想知道一種方法來添加鏈接到我的自定義模塊內的路徑。 - 上面的代碼是我如何解決這個問題.. – 2012-02-23 12:11:06

回答

4

Drupal的鉤子是基於命名約定,如果掛鉤被hook_menu()和你的模塊被稱爲mymodule,那麼你需要實現的函數被調用mymodule_menu()。該代碼是這樣的: 

function mymodule_menu() { 
    $items['user'] = array(
    'title'   => 'Page name', 
    'description'  => t('Account'), 
    'menu_name'  => 'main-menu', 
    'weight'   => 8, 
    'access callback' => TRUE, 
    'page callback' => 'drupal_goto', 
    'page arguments' => array('user'), 
    'access arguments' => array('view own profile'), // permission 
    'type' => MENU_NORMAL_ITEM, 
); 

    return $items; 
} 

但是,路徑user在你做什麼那麼將創造各種問題的系統已經聲明。你想要做的,而不是什麼是使用hook_menu_alter(),改變menu_name對於已經存在的路徑:

function mymodule_menu_alter(&$items) { 
    $items['user']['menu_name'] = 'main-menu'; 
} 

這樣做,這樣你就不會需要提供自己的網頁回調爲標準user路徑將剛剛交付正常頁面。唯一的區別是,一旦你清除了Drupal的緩存,該鏈接就會出現在主菜單中。

+0

謝謝你的回答! - 由於您的解決方案僅用於修改此路徑的菜單項,您是否認爲可以將自定義菜單項添加到菜單中?像'user/uid/edit' .. – 2012-02-23 12:03:34

相關問題