2

使用我的自定义 drupal 模块,我正在尝试使用hook_menu(). 它应该显示链接到用户配置文件的用户名。(我的任务可能类似于添加菜单项/链接到 Drupal 菜单(以编程方式?)。)

[编辑:]我试图用以下方法解决任务,但它可能是错误的方法。

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真的很广泛,但似乎我没有正确理解它并开始在它上面松动..

感谢您的提示!聚丙烯

4

1 回答 1

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

于 2012-02-22T19:40:32.917 回答