Submitted by axelou on
Bonjour,
Je suis en train de développer un module afin de permettre aux visiteurs de voter sur la pertinence d'un article (il s'agit donc d'un formulaire tout simplement). J'ai donc une page d'administration où je définis le type de contenu où afficher mon fameux formulaire. Les droits d'accès sont aussi configurés.
J'arrive donc à mon problème, quand j'ouvre un node, rien ne s'affiche. Pourtant avec la fonction drupal_set_message, les fonctions et les conditions de mon modules conviennent. Je dois, je pense utiliser la fonction Theme afin d'afficher mon formulaire mais la je me perd et je ne sais pas quoi utiliser. Auriez-vous une piste?
Merci d'avance.
ps: soyez indulgent avec mon ignorance, c'est mon premier module. ;)
bonjour toutes les remarques
Permalien Soumis par nyl auster le 29 Avril, 2009 - 10:21
bonjour
toutes les remarques que je vais faire concerne drupal 5 mais la logique doit être la même pour drupal 6.
Si je saisis bien tu veux afficher un formulaire lors de l'affichage d'un node.
Premièrement tu dois créer une fonction chargée de créer ton formulaire; ceci en accord avec l'api de drupal.
http://api.drupal.org/api/file/developer/topics/forms_api.html/6
deuxiemement tu dois donc utiliser la fonction nodeapi dans ton module :
http://api.drupal.org/api/function/hook_nodeapi/6
Je pars du principe que tu connais le principe des hook de drupal. Si ce n'est pas le cas, il faut que tu te documents là dessus en priorité !
Ce hook te permet d'ajouter des éléments lors de l'affichage de ton node (il faut que $op=='view')
C'est donc ici qu'il te faut ajouter un élément à ton node.
pour cela, il faut ajouter une case au tableau $node->content.
$node->content est un tableau contenant tout ce qui s'affiche dans le coeur du node.
ici tu ajoutes quelque chose du genre
weight te permet de positionne ton élément plus haut ou plus bas dans le node.
drupal_get_form transforme ton tableau php généré par ta fonction qui crée le formulaire en formulaire html.
il faut aussi passer la variable $node dont tu vas de toute façon avoir besoin car il faudra surement que ton formulaire puisse récupérer le nid du node par $node->nid par exemple.
enfin il faudra implémenter deux autres hooks :
hook_submit qui va te permettre de récupérer les données de ton formulaire et de les enregistrer dans la BDD -par exemple-
hook_validate si besoin qui va te permettre de valider en amont les données et de controler qu'elles sont conformes à ce que tu attends.
Pour résumer :
-créer une fonction formulaire qui générer ton formulaire sous forme d'array
- utiliser nodeapi pour afficher ce formulaire dans ton node en utilisant la fonction drupal_get_form
- le hook_submit pour traiter les données de ton formulaires une fois que l'utilisateur aura appuyer sur le bouton de soumission
Bonjour nyl auster, Merci
Permalien Soumis par axelou le 29 Avril, 2009 - 13:31
Bonjour nyl auster,
Merci beaucoup pour ta réponse très complète. Je venais de trouver la solution au moment de ton post et j'ai exactement fait comme ça. En tout cas, je n'aurais jamais mieux expliqué. J'espère que ce post en aidera d'autres.
Bonne continuation