Bonjour !
J’ai créé un type de node (appellons-le «maison»), via un module (et non pas via CCK).
J’ai déjà pu ajouter des onglets dans des pages générées par mon module, via l’utilisation des menus (hook_menu) de type MENU_LOCAL_TASK.
Or, j’aimerai maintenant ajouter un onglet lors de l’affichage d’un node de type «maison», mais je ne vois pas trop comment je peux faire cela.
Quand on affiche un node, on obtient une URL du genre «node/636», sur laquelle se trouvent déjà des onglets appartenant à Drupal (# Voir, # Modifier). J’aimerai y ajouter un 3e onglet, mais je ne vois pas comment je peux m’y prendre ici, sans impacter les affichages des nodes d’autres types.
Bref, je suis preneur de tout tuyau,ou d’une page de la documentation à ce sujet !
D’avance un tout grand merci !
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Salut
Voici un exemple
<?php$items['node/%node/mon-onglet'] = array(
'title' => 'Mon onglet',
'page callback' => 'ma fonction de callback',
'page arguments' => array('argument'),
'acces callback' => 'ma_fonction_access',
'acces arguments' => array(1),
'type' => MENU_LOCAL_TASK
);
?>
En fait, tu dois créer une fonction d’access qui renvoi true, si ton node (argument 1) est du type maison et que l’utilisateur y a accès.
Salutations
yvmarques@drupal.org
58
Bonjour Yvmarques !
Merci pour ta réponse, Drupal m’épate chaque jour de plus en plus ! :-)
Pour complèter la réponse, au cas où quelqu’un ferait la même recherche que moi, la fonction de access callback (ici, ma_fonction_access()) reçoit en argument l’objet $node.
function ma_fonction_access($node){
if(strcmp($node->type, 'maison')==0)
{
return(TRUE);
}
else
{
return(FALSE);
}
}
Et le tour est joué !
Comment se fait-il que cette fonction reçoive l’objet $node ? Comment diable Drupal «sait» qu’il doit envoyer l’objet $node à cette fonction ?
Dans le path du menu item créé (pour rappel : $items[‘node/%node/mon-onglet’]), Yvmarques a placé un wildcard, non pas un bête %, mais un %node.
Quand une chaine (ici, il s’agit de ‘node’) est spécifiée après un wildcard, Drupal va appeler une fonction appelée node_load() en passant en argument la valeur reçue via le wildcard. Le retour de cette fonction est alors envoyé à la fonction de callback spécifiée, à savoir : ma_fonction_access().
Plus d’information sur la puissance cachée du wildcard : http://drupal.org/node/224170
Merci Yvmarques pour ton aide ! :-)
Bouchon
26