2012-07-15 19 views
11

Tôi đã cố thêm một tab mới vào một loại nội dung cụ thể 'abc', đây là mã, nhưng nó không hoạt động, tab hiển thị trên tất cả các nút. Ai có thể giúp với nó? Cảm ơn bạn!Drupal 7 hook_menu cho loại nội dung cụ thể

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'; 
} 

Trả lời

12

Các access callback là đúng nơi để đưa ra quyết định về việc có nên hiển thị các tab, nhưng mã chỉ là một lớp lót:

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'); 
} 

Hãy nhớ xóa cache khi bạn đã đã thay đổi mã trong hook_menu() để các thay đổi có hiệu lực.

+0

Nó hoạt động! Trang thử nghiệm có thể nằm trên lớp phủ như thế nào? – user1480765

+2

Hãy xem [hook_admin_paths()] (http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_admin_paths/7) – Clive

+0

Ngoài ra, nó cũng có thể sử dụng một biến thể của 'node_access ('view', $ node)' trong hàm gọi lại xác định quyền truy cập vào nút hiện tại cho người dùng hiện đang đăng nhập. –