使用我的自定义 drupal 模块,我尝试使用 hook_menu()
向菜单中插入添加菜单项。
它应该显示链接到用户配置文件的用户名。
(我的任务可能类似于 Add menu item/link to Drupal menu (programatically?) 。)
[编辑:]我尝试用以下方法解决该任务,但可能是这样做的方法错误..
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');
}
上面的代码没有显示任何内容,但也没有错误..
我可能不想使用页面回调
,因为该页面已经正确存在,但我不确定是否不设置它。
hook_menu()
文档页面 hook_menu 确实很广泛,但似乎我对它的理解不正确,并开始对它感到困惑..
谢谢各位指点! PP
最佳答案
Drupal 钩子(Hook)基于命名约定,如果钩子(Hook)称为 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';
}
这样做,您将不需要提供自己的页面回调,因为标准的用户
路径将只提供正常的页面。唯一的区别是,一旦您清除了 Drupal 的缓存,该帐户的链接就会出现在主菜单中。
关于php - 如何从我的自定义 Drupal 7 模块添加菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400442/