2012-07-15 16 views
11

Intenté agregar una nueva pestaña a un tipo de contenido específico 'abc', aquí está el código, pero no funciona, la pestaña muestra todos los nodos. ¿Alguien puede ayudar con eso? ¡Gracias!Drupal 7 hook_menu para el tipo de contenido específico

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

Respuesta

12

El access callback es el lugar adecuado para tomar la decisión sobre si se debe mostrar la ficha, pero el código es sólo una sola línea:

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

Asegúrese de extraer las cachés una vez que haya cambió el código en hook_menu() para que los cambios surtan efecto.

+0

¡Funciona! ¿Cómo puede permanecer la página de prueba en la superposición? – user1480765

+2

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

+0

Como un aparte, también es posible utilice una variante de 'node_access ('view', $ node)' en la devolución de llamada que determina el acceso al nodo actual para el usuario actualmente conectado. –

Cuestiones relacionadas