2012-02-22 117 views
2

的菜单项与我的自定义drupal模块我试图插入添加菜单项使用hook_menu()菜单项。 它应显示链接到用户配置文件的用户名。 (我的任务可能类似于Add menu item/link to Drupal menu (programatically?)如何添加我的自定义Drupal 7-模块

[编辑:]我试图解决以下任务,但它可能是,它的错误的方式来做到这一点..

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

我想我想知道一种方法来添加链接到我的自定义模块内的路径。 - 上面的代码是我如何解决这个问题.. – 2012-02-23 12:11:06

回答

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

+0

谢谢你的回答! - 由于您的解决方案仅用于修改此路径的菜单项,您是否认为可以将自定义菜单项添加到菜单中?像'user/uid/edit' .. – 2012-02-23 12:03:34