Bonjour,
Je voulais savoir si vous aviez un avis sur la meilleure manière de passer des données à la fin d’un form_submit(). J’utilise l’API form de Drupal 5.1.
Mon but est tout simple : faire un formulaire qui effectue des calculs et affiche une page avec les resultats.
J’en suis à la partie où j’effectue bien les calculs dans form_submit() mais celui-ci se termine sur une redirection et c’est la que le bat blesse : comment transmettre mes résultats ?
J’ai pensé à deux solutions :
1 - passer les données dans l’URL, cad si l’URL de callback est défini a «formulaire/resultats», je retourne «formulaire/resultats/$a/$b/$c» avec $a, $b, $c comme données.
C’est un peu moche vu que ca fait apparaitre les données dans l’URL.
2 - stocker les données dans la superglobale $_SESSION : $_SESSION[‘results’] = array($a, $b, $c).
C’est mieux, mais si l’utilisateur a desactivé les cookies, game over (je n’ai que des utilisateurs anonymes).
L’idéal serait un compromis, comme la solution 1 mais en passant les données de manière cachée.
Est-ce qu’il n’est pas possible de dire à Drupal : «je ne veux pas de redirection, affiche moi ce contenu là dans le form_submit()» ? Ca m’éviterait tout ce bazar…
Bref, comment resolvez-vous en pratique ce problème tout bête de générer une page de résultat après un formulaire ?
Merci à tous :)
Pierre
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Bon apparement, il n’y a point de salut hors de $_SESSION…
http://drupal.org/node/140581
pierrem
4
Bon pour repondre a ta question, j’ai pas d’idee, par contre je me souviens que dans Drupal 4.7 (ou ptet avant), lorsque tu finissais de t’enregistrer, l’ecran t’affichait ton mot de passe temporaire, donc il doit y avoir un moyen nan ?
tostinni
1268
Hello,
C’est marrant, cette question correspond exactement à un exercice que l’on fait dans la formation Drupal.
Si tu veux simplement afficher le résultat à l’utilisateur, sans mise en forme particulière, le plus simple est d’utiliser la fonction drupal_set_message(). Cette fonction «résiste» aux redirections, dans le sens où elle garde en mémoire (dans la session, en réalité) les textes qui lui sont passés jusqu’à ce qu’elle ait l’occasion de les afficher.
Sinon, tu as raison : il n’y a pas d’autre solution que de passer les valeurs dans l’URL ou la session. C’est ce que fait par exemple le moteur de recherche de Drupal (après avoir lancé une recherche, les termes de la recherche continuent à apparaître dans le champ de recherche, alors qu’il y a bien eu une redirection).
Vincent
Formations Drupal pour WEBMASTERS, DESIGNERS et DÉVELOPPEURS.
drupalfrance
1772
Je pense que renvoyer «false» à cette fonction désactive la redirection. Je vérifie et je te confirme ca.
EDIT : ouep, c’est ça (cf. fonction drupal_redirect_form())
Damien Tournoud
808
C. à d. «désactive la redirection» ? tu veux dire qu’il n’y a PLUS de redirection du tout ? Dans ce cas, quelle page est affichée ? (la page du form ?)
Vincent
Formations Drupal pour WEBMASTERS, DESIGNERS et DÉVELOPPEURS.
drupalfrance
1772
Bonne question, je n’en sais rien. Je ne sais même pas si le callback de page est appellé lors du traitement d’un formulaire dans le Form 2.0.
Damien Tournoud
808
Merci à tous pour vos réponses :)
Je pense que si on désactive la redirection, on revient en effet sur la page du formulaire (je n’ai pas testé).
Il n’y a pas de moyen de générer du contenu sans rediriger sur un autre callback de menu. Donc, $_SESSION reste indispensable…
Pour information drupal_set_message() utilise cette technique.
Apparement, si un utilisateur désactive les cookies et bien tant pis.
D’un autre côté, quelqu’un d’assez geek pour aller les désactiver sera assez geek pour les réactiver… :)
Peut-être que je pourrais afficher un message si les cookies sont désactivés, il faut que je recherche comment faire.
Merci encore.
pierrem
4