[résolu]pb hook_menu : ajouter deux onglets sur un noeud

Catégories:

Bonjour,
J’ai créé un module permettant d’ajouter un nouvel onglet lors de l’affichage d’un nœud, jusque là pas de problème.
Voilà ce que j’ai dans mon module (nommé node_to_odt) pour cela :

function node_to_odt_menu() {
...
  $items['node/%node/node_to_odt'] = array(
   'access callback' => 'node_to_odt_access',
    'access arguments' => array(1),
    'page callback' => 'node_to_odt_node_to_odt',
    'page arguments' => array(1),
    'title' => 'Odt version',
    'weight' => 5,
    'type' => MENU_LOCAL_TASK,
  );
...
}
function node_to_odt_access ($node) {
  global $user;
  // Check basic permissions first.
 
  $access = (user_access('export node to odt') );
  // Make sure the user can view the original node content.
  $access = $access && node_access('view', $node);
  // Check additional conditions
  $access = $access && (node_to_odt_is_permitted($node->type) && filter_access($node->format) );
  // Let other modules alter this - for exmple to only allow some users
  // to export specific nodes or types.
 

  drupal_alter("node_to_odt_access", $access, $node);
  return $access;
}

Je souhaite maintenant ajouter un autre onglet sur ce noeud s’il s’agit d’un parent de book.

J’ai donc rajouté, au niveau de mon hook_menu, un nouvel item :

function node_to_odt_menu() {
...
  $items['node/%node/book_node_to_odt'] = array(
   'access callback' => '_book_node_to_odt_access',
    'access arguments' => array(1),
    'page callback' => 'book_node_to_odt',
    'page arguments' => array(1),
    'title' => 'Book Odt version',
    'weight' => 5,
    'type' => MENU_LOCAL_TASK,
  );
...
}
function _book_node_to_odt_access ($node) {
...
même chose que node_to_odt_access pour le moment
...
}

Le problème est que ce nouvel onglet n’apparait pas.
J’ai essayé en n’ayant qu’une seule fonction node_to_odt_access, avec deux arguments, en mettant :

function node_to_odt_menu() {
$items['node/%node/node_to_odt'] = array(
   'access callback' => 'node_to_odt_access',
    'access arguments' => array('node',1),
    'page callback' => 'node_to_odt_node_to_odt',
    'page arguments' => array(1),
    'title' => 'Odt version',
    'weight' => 5,
    'type' => MENU_LOCAL_TASK,
  );
$items['node/%node/node_to_odt'] = array(
   'access callback' => 'node_to_odt_access',
    'access arguments' => array('book',1),
    'page callback' => 'book_node_to_odt',
    'page arguments' => array(1),
    'title' => 'Odt version',
    'weight' => 5,
    'type' => MENU_LOCAL_TASK,
  );
}
function node_to_odt_access ($type,$node) {
...
}

et là j’obtiens le message d’erreur «Missing argument 2 for node_to_odt_access».
Je ne vois pas comment faire pour ajouter ce nouvel onglet.
Quelqu’un aurait-il une idée ?

#

Et sans section ‘access’ ça donne quoi ?

Yoran - arNuméral

#

En supprimant le cache via le menu performance, mon second onglet apparait bien. Il semble que ce n’était qu’un problème de cache.

Syndiquer le contenu