Bonjour !
Jusqu’à présent, les modules que j’ai du réaliser géraient chaque fois un type de noeud.
Je dois créer un module qui va devoir gérer 3 types de noeuds différents.
Or, quand je lis la documentation, «hook_» doit être remplacé par le nom du module dans les différents hooks existants (en particulier ceux qui m’intéressent : hook_form
hook_validate, hook_insert, hook_load, hook_update, hook_delete, hook_view).
J’ai donc du mal à voir comment je peux gérer cela, d’autant que la documentation - sauf erreur - ne donne aucun exemple sur cela.
Si quelqu’un pouvait m’éclairer sur ce sujet, soit par un exemple, un lien vers une page de documentation, voire un module précis que je pourrais autopsier, je lui en serais très reconnaissant !
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Bonjour
Je suis dans la même histoire depuis hier soir… peut être en réalisant des tests sur le $node qui parvient au hook ? Moi non plus je en sais pas comment expliquer pour le moment à mon hook_form qu’il ne doit pas forcément faire la même chose pour tous les nodes de mon modules. J’ai galéré sur la gestion des permissions et je crois que ça a finit en boucle foreach pour le hook_perm. Pour le hook_access la virable $node n’est ni un objet ni un array mais simplement une variable représentant le type de contenu (dans drupal 5 désolé j’ai un peu de retard) ; donc j’ai pu faire des tests avec ça. Mais je n’ai pas encore explorer les hooks restants :-)
Sinon il reste la possibilité de passer par le hook_form_alter avec controle sur le type de noeud mais bon… (ou hook_nodeapi pour quand on voit le node…)
http://formation.ideia.fr/formation/drupal-la-carte | http://twitter.com/nyl_auster
nyl auster
838
salut, je viens de voir que le hook_form propose l’objet node en paramètre qui à ce stade contient déjà le $node->type ; il est donc facile de réaliser un switch sur les types au sein du hook. Je ne sais pas si c’est la solution optimale mais y’a pas de raison que ça marche pas ( ?)
http://formation.ideia.fr/formation/drupal-la-carte | http://twitter.com/nyl_auster
nyl auster
838
Bien vu !
Mais est-ce que les autres hook_ (insert, update,…) en font de même ? Je vérifie ca de suite !
Bouchon
26
A question bièsse, réponse bièsse : bien sur puisque ces fonctions ont besoin de $node pour pouvoir faire ce qu’elles doivent faire !
Il me reste à tester, et - si ca fonctionne - complèter la documentation Drupal.
Bouchon
26
re-Bonjour !
Cela fonctionne parfaitement en faisant un switch sur $node->type dans les différents hook_ concernés.
Voici le module de test qui a été utilisé pour tester la technique : http://www.greenforge.be/divers/drupal/multinodetypes.tar.gz
En espérant que cela sera utile à d’autres ! :-)
Très cordialement,
Bouchon
26
Le plus simple est d’utiliser le paramètre
'module'dans votrehook_node_info(), comme ceci :<?phpfunction mon_module_node_info() {
return array(
'nodetype1' => array(
'name' => t('nodetype1'),
'module' => 'mon_module_type1',
),
'nodetype2' => array(
'name' => t('nodetype2'),
'module' => 'mon_module_type2',
),
);
}
?>
Dans ce cas, les hooks liés aux types de contenu (qui ne sont pas en fait vraiment des hooks, mais c’est une autre histoires) seront nommés :
mon_module_type1_form()mon_module_type1_update()
mon_module_type1_insert()
...
mon_module_type2_form()
mon_module_type2_update()
mon_module_type2_insert()
...
Damien Tournoud
808
merci du tuyau !
Dans mon cas La méthode des switch me convient mieux car je ne connais pas le nom des types de contenus à l’avance - à moins qu’il soit possible de faire en sorte que les noms de ces fonctions contiennent des variables ?
http://formation.ideia.fr/formation/drupal-la-carte | http://twitter.com/nyl_auster
nyl auster
838
S’il ne s’agit pas de types de node créés par ton module, je pense que tu aurais tout intérêt à te servir de hook_nodeapi et de filtrer via switch() sur le type de node et sur le type des opérations.
Bouchon
26
ils sont bien crées par mon module mais le nom provient de champs dans l’administration que l’utilisateur peut remplir à sa guise.
http://formation.ideia.fr/formation/drupal-la-carte | http://twitter.com/nyl_auster
nyl auster
838
Merci Damien !
C’est encore plus simple que ce que nyl auster et moi avions trouvé dans nos recherches et tests respectifs.
Bon, quelqu’un sait comment peut-on suggérer des modifications dans la documentation de http://api.drupal.org/api/function/hook_node_info/6 ? Une explication à ce sujet mériterait d’y être ajoutée, je suppose que nous ne sommes pas les seuls à avoir cherché ?
Bouchon
26