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

+2

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

+0

을 보시기 바랍니다. 현재 로그인 한 사용자에 대한 현재 노드에 대한 액세스를 결정하는 콜백에서'node_access ('view', $ node)'변형을 사용하십시오. –

관련 문제