¿Cómo agregar una pestaña de tarea local a la vista de nodo? [cerrado]


8

Estoy tratando de agregar una pestaña adicional a las pestañas 'ver' y 'editar' del nodo.

Mi módulo está habilitado y he borrado el caché, pero mi nueva pestaña no aparece. ¿Qué me estoy perdiendo?

/**
* Implements hook_menu().
*/
function add_performance_menu() {
  $items = array();

  $items['node/%node/performance'] = array(
    'title' => 'Add a performance',
    'page callback' => 'add_performance_action',
    'access callback' => TRUE,
    'type' => MENU_LOCAL_TASK,
  );

  return $items;
}

/**
* Page callback.
*/
function add_performance_action() {
  return t('Hello');
}

¿Funciona la ruta? Si va a '/ node / 1 / performance', ¿recupera "Hola"?
— Les Lim

Buen punto. No, solo muestra el nodo como de costumbre.
— pushka

44
No hay nada de malo en el código que publicó, así que realice las comprobaciones habituales: mire el nombre de archivo del archivo del módulo en busca de errores tipográficos, en realidad mire las tablas de caché para asegurarse de que se están borrando, etc.
— Les Lim

1
Hola, gracias. Me tranquilizó saber que no era el código. Al final, lo conseguí trabajando deshabilitando y volviendo a habilitar el módulo. ¿Quizás porque la tabla del enrutador se actualiza al habilitar? De todos modos ... funciona ahora.
— pushka

Respuestas:



0

Su código se ve bien, pero recuerde borrar sus cachés de Drupal en admin / config / development / performance después de cada cambio en su hook_menu anterior.

La alternativa que viene a la mente sería usar hook_menu_local_tasks_alter, porque el elemento de menú que queremos usar puede que ya exista.

También puedes probar esto, espero que te ayude:

/**
* Implements hook_menu().
*/
function add_performance_menu() {
  $items = array();
  $items['node/%node/performance'] = array(
    'title' => 'Add a performance',
    'access callback' => 'your_module_access_check',
    'access arguments' => array(1),
    'type' => MENU_LOCAL_TASK,
  );
  return $items;
}
function your_module_access_check($node) {
  if ($node->type == 'page') {
    return TRUE;
  }
  return FALSE;
}

Gracias

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.