2011-10-06 104 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

好主意,从来没有想到这一点。肯定会尝试。 –