Submitted by Exeldo on
Bonjour,
Je m’apprêtais à faire un bête formulaire html sur mon site pour traiter les valeurs soumises dans un script php via $_POST, jusque là, rien d'anormal.
Mais voila que je commence à lire qu'il ne faut pas faire ça sous Drupal, il y a $form prévu à cet effet, plus sécurisé, ect...
Après une demi-journée à décrypter la doc anglaise, j'en suis arrivé a peu prés là:
<?php
function le_nom_de_ma_form() {
$form = array();
$form['nom'] = array(
'#type' => 'textfield',
'#title' => t('Votre nom'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('OK'),
);
return $form;
}
?>
Donc là c'est facile, il y a les même exemples partout, une fonction qui retourne le formulaire "version drupal".
Après ce fus plus coton, déjà, rien que pour afficher le formulaire dans un node, je n'ai pas trouvé beaucoup d'indication. J'ai néanmoins réussi à bidouiller ce morceau de code qui a au moins le mérite de m'afficher mon formulaire dans une page via un fichier de template.
<?php
$output = drupal_get_form('le_nom_de_ma_form');
print drupal_render($output);
?>
J'ignore si c'est la bonne façon de procéder.
Ca fait maintenant une deuxièmes demi-journée que j’essaie simplement de récupérer les données saisi dans le champ texte du formulaire, mais pas moyen. Il y a une doc monstre sur comment crée son formulaire et le personnaliser mais rien sur comment s'en servir.
Ca parle bien de le_nom_de_ma_form_validate et le_nom_de_ma_form_submit.
J'ai vaguement compris qu'il fallait écrire une fonction _submit et que la valeur était incluse dans $form_state['value']['le_nom_du_champ'].
<?php
function le_nom_de_ma_form_submit($form, &$form_state){
//ici mon code avec $form_state['value']
}
?>
Si je saisi bien, cette fonction sera déclencher quand quelqu'un clique sur le bouton submit.
J'aimerais vraiment respecter les conventions Drupal, mais là, tant de code pour un simple formulaire qui m'aurais pris 10s en temps normal.
Tout ce que je voulais c'est pouvoir afficher sur mon nœud les données saisi dans un champ texte, pas réinventer la roue :'(
Avant de céder à l'appel du FORM&IMPUT , je tente quand même de demander un petit coup de pouce sur la compréhension.
Merci
Bonjour, Une solution parmi
Permalien Soumis par stomerfull le 20 Juin, 2012 - 10:09
Bonjour,
Une solution parmi d'autre c'est :
Tu crée un module personnalisé et tu écrit dedans les codes qui affiche le formulaire avec les autres traitements que tu veux : insertion dans la base, suppressions ect ect
et dans ton template tu peut appeler le module facilement avec la fonction
module_invoke()
Pour les paramètres de la fonction tu peux te documenté car il y en partout sur les forums /docs anglais
Merci, cela me donne une
Permalien Soumis par Exeldo le 20 Juin, 2012 - 14:56
Merci, cela me donne une façon plus propre d'appeler mon formulaire, mais mon principale problème c'est que je ne sais pas récupérer les valeur du saisi par l'utilisateur.
Dans les exemples de submit, ils envoient les donnés du formulaires dans la base de donnée, mais je vais pas stocker dans la base de donnée des données des données sensés être éphémères, c'est stupide et contre-performant.
Je veut juste pouvoir faire un simple
tu peut récupérer ça dans les
Permalien Soumis par stomerfull le 20 Juin, 2012 - 16:57
tu peut récupérer ça dans les fonctions de ton module si tu l' a bien créé
C’est effectivement ce qui
Permalien Soumis par hles le 20 Juin, 2012 - 18:54
C'est effectivement ce qui est mentionne dans Form API Quickstart Guide que vous devez utiliser. Vous verrez qu'il ne faut pas plus de 5 lignes de code pour récupérer les valeurs soumises dans le formulaire via $form_state['values'] et les afficher.
Je reprend les formulaires
Permalien Soumis par Exeldo le 23 Juin, 2012 - 16:02
Je reprend les formulaires après les avoir mis de coter pour recommencer la tête froide.
Je bloque maintenant sur la function _submit qui ne s'appelle pas.
Pour exemple:
Si jamais je déclenche l'erreur en rentrant 1 dans mon champ texte, il m’affiche bien le mark1 et me passe le champ en rouge, par contre si je passe une autre valeur, alors rien ne se passe, _submit n'est pas activer, je ne comprend pas.
au passage, return form_set_error('nom', "erreur"); ne m'affiche pas non plus de message "erreur".
Regardez bien le code du
Permalien Soumis par hles le 23 Juin, 2012 - 17:53
Regardez bien le code du module form_example (http://drupal.org/project/examples), vous y trouverez du code documenté, et notamment la réponse a vos questions entre autres.
Par exemple:
- il ne doit pas y avoir de "return form_set_error" mais juste "form_set_error" dans votre fonction validate.
- votre fonction retournant le formulaire devrait avoir des arguments $form et &$form_state.
Merci beaucoup, j’ai enfin
Permalien Soumis par Exeldo le 23 Juin, 2012 - 21:17
Merci beaucoup,
j'ai enfin réussi à faire marcher le code.
Ce fus une longue semaine ^^