2012-07-15 132 views
11

我试图添加一个新的选项卡到特定的内容类型'abc',这里是代码,但它不起作用,选项卡显示在所有节点上。任何人都可以帮忙吗?谢谢!Drupal 7 hook_menu特定内容类型

function addtabexample_menu() { 
    $items=array(); 

    $items['node/%node/test'] = array(
    'title' => 'Test', 
    'page callback' => 'handle_test', 
    'page arguments' => array('node', 1), 
    'access arguments' => array('access content'), 
    'type' => MENU_LOCAL_TASK, 
    'weight' => 100, 
); 
return $items; 
} 

function handle_test($node){ 

    $result='hi'; 
    if ($node->type == 'abc') { 
    $result='I am working'; 
} 

回答

12

access callback是使是否显示选项卡上的决定权的地方,但代码仅仅是一个班轮:

function addtabexample_menu() { 
    $items = array(); 

    $items['node/%node/test'] = array(
    'title' => 'Test', 
    'page callback' => 'handle_test', 
    'page arguments' => array('node', 1), 
    'access callback' => 'addtabexample_access_callback', 
    'access arguments' => array(1), 
    'type' => MENU_LOCAL_TASK, 
    'weight' => 100, 
); 

    return $items; 
} 

function addtabexample_access_callback($node) { 
    return $node->type == 'abc' && user_access('access content'); 
} 

记住,一旦你清除缓存更改了hook_menu()中的代码以使更改生效。

+0

它的工作原理!测试页面如何保留在覆盖层上? – user1480765 2012-07-15 16:45:38

+2

看看[hook_admin_paths()](http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_admin_paths/7) – Clive 2012-07-16 08:52:12

+0

另外,它也可以在回调中使用'node_access('view',$ node)''的变体,该变体确定当前登录用户对当前节点的访问权限。 – 2014-06-14 06:16:40