2012-07-15 130 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