如何从我的自定义Drupal 7模块添加菜单项

时间:2012-02-22 18:06:17

标签: php menu drupal-7 hook-menu

使用我的自定义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

1 个答案:

答案 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的缓存,帐户的链接就会出现在主菜单中。