【问题标题】:How to add a menu item from my custom Drupal 7-module如何从我的自定义 Drupal 7 模块中添加菜单项
【发布时间】:2012-02-22 18:06:16
【问题描述】:

通过我的自定义 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');
}

上面的代码没有任何显示,但也没有错误..

我可能不想使用page callback,因为该页面已经正确存在,但我不确定是否不设置它。

hook_menu() 文档页面hook_menu 确实很广泛,但我似乎没有正确理解它并开始在它上面松动..

感谢您的提示! 聚丙烯

【问题讨论】:

  • 我想我想知道一种将链接添加到自定义模块内部路径的方法。 - 上面的代码是我尝试解决问题的方法..

标签: php menu drupal-7 hook-menu


【解决方案1】:

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

【讨论】:

  • 感谢您的回答! - 由于您的解决方案仅用于修改此路径的菜单项,您认为有可能向菜单添加自定义菜单项吗?喜欢user/uid/edit..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多