2010-04-14 4 views
2

Je construis un module personnalisé qui permettra à mes utilisateurs de faire une simple requête sur une base de données MS SQL. J'ai construit le formulaire en utilisant hook_form() et ai obtenu la validation pour fonctionner.Comment afficher les données d'une base de données externe dans Drupal?

Je prévois de récupérer les données de hook_form_submit(), mais une fois cela fait, comment l'ajouter en dessous du formulaire? Il ne semble pas que j'ai accès à la sortie $ de hook_form_submit(). Je ne sais pas quoi faire ensuite.

Merci

Dana

Répondre

0

Le problème en essayant de données de sortie dans la méthode hook_form() est que la méthode est invoquée deux fois qui efface les valeurs post la deuxième fois à travers. Lancez un dpm ($ form_state) dans la fonction hook_form() et vous verrez deux ensembles de données de publication. Un avec des valeurs et un sans. Donc, après avoir disséqué le module de recherche intégré, qui fonctionne à peu près exactement comme je veux que mon formulaire fonctionne, j'ai compris comment cela se faisait. Eh bien, au moins une façon de le faire. Ce module recherche prend les valeurs de $ form_state dans hook_form_submit() et les colle dans l'URL, puis il définit le $ form_state ['redirect'] à cette nouvelle URL, stockant efficacement ces variables dans l'URL et changer le POST à ​​un GET.

Maintenant, dans le rappel, ils extraient ces valeurs de l'URL, font la recherche sur eux, ALORS ils appellent drupal_get_form(), ajoutent les résultats à la fin et le retournent.

Il existe une autre solution HERE où ils utilisent SESSION pour stocker les valeurs jusqu'au deuxième passage. Bizarre, mais ça marche.

2

Lorsque vous êtes rendu le formulaire que vous devriez vérifier form_state $ [ « valeurs »] pour voir si l'utilisateur a déjà soumis un formulaire lorsque vous rendu la forme. Ensuite, vous pouvez peindre les résultats de la forme dans la même étape que la peinture du formulaire.

La première fois que l'utilisateur charge la page de formulaire, la variable $ form_state ne contient aucune information sur le formulaire, ce qui vous permet de générer une table de résultats vide.

Il y a une bonne illustration du flux de travail API Form Drupal Drupal.org ici: Form API Internal Workflow Illustration

+0

Merci pour votre inscription. Mais le problème est que $ form_state n'est pas disponible jusqu'à ce que hook_form_submit() soit correct? D'ici là, il est trop tard pour mettre à jour le formulaire. J'ai besoin d'obtenir les valeurs de post dans ma fonction de callback (qui dans mon cas est sqlquery_page().) Je suppose que je peux juste saisir $ _POST et y récupérer mes valeurs – Dana

+0

La variable $ form_state est passée quand drupal_get_form est appelée. //api.drupal.org/api/function/example_form/6 Comme l'a dit alxp, vous pouvez vérifier les valeurs soumises ici et, si elles existent, afficher le contenu extrait de votre base de données source externe. – jhedstrom

Questions connexes