2012-07-15 5 views
11

Ho provato ad aggiungere una nuova scheda a un tipo di contenuto specifico 'abc', ecco il codice, ma non funziona, la scheda viene visualizzata su tutti i nodi. Qualcuno può aiutarci? Grazie!Drupal 7 hook_menu per tipo di contenuto specifico

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

risposta

12

Il access callback è il posto giusto per prendere la decisione sull'opportunità di visualizzare la scheda, ma il codice è solo una battuta:

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

ricordarsi di cancellare le cache una volta che hai modificato il codice in hook_menu() per rendere effettive le modifiche.

+0

Funziona! In che modo la pagina di test può rimanere sull'overlay? – user1480765

+2

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

+0

Per inciso, è anche possibile utilizzare una variante di 'node_access ('view', $ node)' nel callback che determina l'accesso al nodo corrente per l'utente attualmente connesso. –

Problemi correlati