使用我的自定义drupal-module我试图使用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');
}
使用上面的代码,没有任何显示,但也没有错误..
我可能不想使用page callback
,因为该页面已经存在,但我不确定是否设置它。
hook_menu()
文档页面hook_menu真的很广泛,但似乎我不理解它是正确的,并开始松开它...
谢谢您的提示! PP
答案 0 :(得分: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的缓存,帐户的链接就会出现在主菜单中。