2011-10-06 101 views
1

好的,所以我有一個奇怪的事情要做,我會很感激任何幫助。當您進入Drupal管理面板並點擊Structure時,您會看到一個菜單,其中包含BlocksContent types,Menus等。創建Drupal(子)菜單

有沒有一種方法可以基於路徑以編程方式構建其中一個菜單?例如,如果我的模塊名爲test,並且我的模塊的所有子動作都位於www.drupalsite.com/admin/test/action_name,那麼我可以使用當前模塊中的所有/test/action_name生成我的菜單嗎?

我知道有硬編碼菜單的選項,但我想避免它,如果可能的話。

回答

1

沒有更多的信息很難描述,但你只需要實現hook_menu()並循環你的動作列表,爲每個動作創建一個菜單項。每次重建菜單時,都會調用菜單鉤子,並將當前的動作列表構建爲菜單鏈接。事情是這樣的:

function mymodule_menu() { 
    $actions = mymodule_get_actions_list(); 

    foreach ($actions as $action) { 
    $items['admin/test/' . $action->name] = array(
     'title' => $action->name, 
     'access arguments' => array('some permission'), 
     'page callback' => 'mymodule_callback', 
     'page_arguments' => array($action->name) 
    ); 
    } 


    return $items; 
} 

function mymodule_callback($action_name) { 
    // Load the action and display the page 
} 

後你打電話給你的自定義代碼來創建這些動作中的一個,一定要打電話menu_rebuild()所以你的鉤子運行和新動作被添加到菜單。

+0

謝謝,但我知道如何添加菜單項,我不知道的是如何顯示它們(我不是說在頂層菜單中顯示它們,因爲我知道它們會自動添加到那裏),而是讓它們顯示在自定義頁面上。 –

+0

爲什麼不從你的自定義頁面調用'mymodule_menu()'並在菜單項中循環? – Clive

+0

好主意,從來沒有想到這一點。肯定會嘗試。 –