Submitted by pierrem on
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
Bon apparement, il n'y a
Permalien Soumis par pierrem le 1 Mai, 2007 - 21:39
Bon apparement, il n'y a point de salut hors de $_SESSION...
http://drupal.org/node/140581
Bon pour repondre a ta
Permalien Soumis par tostinni le 1 Mai, 2007 - 22:24
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 ?
Hello, C'est marrant, cette
Permalien Soumis par drupalfrance le 2 Mai, 2007 - 11:28
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).
Je pense que renvoyer
Permalien Soumis par Damien Tournoud le 2 Mai, 2007 - 11:51
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())
C. à d. "désactive la
Permalien Soumis par drupalfrance le 2 Mai, 2007 - 14:20
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 ?)
Bonne question, je n'en sais
Permalien Soumis par Damien Tournoud le 2 Mai, 2007 - 15:40
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.
Merci à tous pour vos
Permalien Soumis par pierrem le 3 Mai, 2007 - 09:22
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.