¿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.