Comment ajouter un onglet de tâche local à la vue du nœud? [fermé]

8

J'essaie d'ajouter un onglet supplémentaire aux onglets «Afficher» et «Modifier» du nœud.

Mon module est bien activé et j'ai effacé le cache, mais mon nouvel onglet n'apparaît pas. Qu'est-ce que je rate?

/**
* 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');
}
pushka
la source
La route fonctionne-t-elle? Si vous allez dans '/ node / 1 / performance', obtenez-vous "Hello" en retour?
Les Lim
Bon point. Non, il affiche simplement le nœud comme d'habitude.
pushka
4
Il n'y a rien de mal avec le code que vous avez publié, alors passez par les vérifications habituelles: regardez le nom de fichier de votre fichier de module pour les fautes de frappe, regardez réellement vos tables de cache pour vous assurer qu'elles sont effacées, etc.
Les Lim
1
Hé merci - rassurant de savoir que ce n'était pas le code. En fin de compte, je l'ai fait fonctionner en désactivant et en réactivant le module. Peut-être parce que la table du routeur est mise à jour lors de l'activation? Quoi qu'il en soit ... cela fonctionne maintenant.
pushka

Réponses:

0

Lorsque vous modifiez le hook_menu, vous n'avez pas à «vider le cache» mais à « reconstruire les menus ».

Petrroll
la source
reconstruire les menus est suffisant, mais vider le cache inclut les menus de reconstruction.
sanzante
0

Votre code semble bon mais n'oubliez pas d'effacer vos caches Drupal dans admin / config / development / performance après chaque modification de votre hook_menu ci-dessus.

L'alternative qui me vient à l'esprit serait d'utiliser hook_menu_local_tasks_alter, car l'élément de menu que nous voulons utiliser existe peut-être déjà.

Vous pouvez également essayer ceci, j'espère que cela vous aidera:

/**
* 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;
}

Merci

Kumar Rahul Sankrit
la source