2009-10-02 12 views
0

J'ai créé un BLOC (à gauche) avec cette forme simple. Maintenant je veux TRAITER et AFFICHER les résultats sur PAGE (au centre) Comment puis-je le faire?Drupal 6 passer des variables de formulaires au contenu, comment?

Entrées:

name = James 
surname = Bond 

sortie Je veux:

<div style="color:red">Welcome, James Bond</div> 

ici est un bloc qui je l'ai écrit et travaille.

<?php 

echo drupal_get_form('myForm'); 

function myForm($form_state) { 
$form['name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Name'), 
    '#size' => 20, 
    '#maxlength' => 10 
); 
$form['surname'] = array(
    '#type' => 'textfield', 
    '#title' => t('Surname'), 
    '#size' => 20, 
    '#maxlength' => 10 
); 
$form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Save') 
); 
return $form; 
} 

function myForm_submit($form,&$form_state) 
{ 
//?? 
}; 

Maintenant, j'ai besoin d'afficher la sortie :).

S'il vous plaît ne pas suggérer d'utiliser VIEWS ou tout autre addon.

Je veux apprendre Drupal de Inside Out. Pas l'inverse;)

Répondre

4

Eh bien, cela dépend un peu de la façon dont vous voulez faire les choses. Puisque vous apprenez comment créer un module drupal, vous pouvez commencer par une implémentation de hook_menu(). Ce crochet est utilisé pour définir les éléments de menu, ce qui signifie que vous pouvez enregistrer des URL avec cette fonction. Aller dans cette voie, vous pouvez:

  1. Mettre en œuvre hook_menu()
  2. d'une manière générale de la manipulation réoriente utilise drupal_goto(). Cependant, dans ce cas, il est beaucoup plus approprié d'utiliser le $form_state['redirect'] comme Henrik l'a expliqué dans son commentaire.
  3. Pour l'URL vers laquelle vous redirigez, vous devriez avoir une fonction de rappel qui est où vous mettez votre logique, la façon dont vous configurez le hook_menu et la fonction de rappel déterminera comment vous obtenez vos variables disponibles. Vous voulez probablement regarder dans la fonction arg() qui est ce qui est généralement utilisé pour obtenir les valeurs de l'URL.
  4. Exécutez l'entrée d'utilisateur à travers un filtre pour vous assurer qu'ils ont pas posté des choses désagréables comme des balises de script ect, utilisez check_plain
  5. retour une fonction de thème, alternativement faire votre propre, regardez theme() et hook_theme()

Il existe des moyens plus rapides de le faire, mais de cette façon, vous générez des URL pour chaque résultat de recherche que drupal peut mettre en cache, ce qui est agréable. En outre ne pas être dépendant des paramètres de publication, les gens peuvent mettre en signet les résultats de la recherche

Une autre chose est que vous pourriez vouloir mettre une certaine validation de base à votre formulaire. Ce serait une bonne pratique à apprendre. Cela ressemblerait à quelque chose comme ceci:

/** 
* Validation handler for myForm. 
*/ 
function myForm_validate($form, &$form_state) { 
    $name = $form_state['values']['name']; 
    // do some checks to $name. 
    if ($error) { 
     form_set_error('name', t('error message to be displayed, showing the value of the field: @name', array('@name' => $name); 
    } 
}; 
+1

Il est à noter que 'drupal_goto' est appelé implicitement après la dernière fonction de soumission de formulaire, en redirigeant vers le chemin trouvé dans' $ form ['# redirect'] '. Par défaut, il s'agit de la page à partir de laquelle le formulaire a été envoyé, mais il est courant de l'ajuster dans la fonction de soumission. Dans ce cas, une façon de transmettre les variables à un rappel de page consisterait à les placer dans ce chemin, par ex. '$ form ['# redirect'] = 'bienvenue /'. $ form_state ['values'] ['nom'] ... '. Le rappel pour 'welcome /%' créerait alors la sortie, en utilisant les valeurs passées. –

+0

Merci, j'ai oublié l'argument de redirection dans le formulaire $. Ajouté à ma réponse. – googletorp

+0

** Oups - une correction: ** Selon docs, on devrait mettre $ form_state ['redirect'] dans les fonctions de soumission (autre paramètre, aucun signe de hachage) au lieu de $ form ['# redirect'] (ceci est juste pour définir la redirection voulue sur la création de formulaire) –

0

Vous pouvez mettre en œuvre AHAH dans votre formulaire et spécifiez un élément à l'intérieur de la zone de contenu de votre page comme « l'emballage » (l'élément dans lequel les résultats de la fonction de rappel seront placés). Mais, vous auriez besoin de comprendre l'excellent conseil de M. Opel avant même de l'essayer.

0

Que diriez-vous d'utiliser drupal_set_html_head() pour écrire une chaîne de script dans la section head de la page? Je le fais sur des pages spécifiques (en obtenant la latitude et la longitude de l'utilisateur et en les passant dans ma fonction gMap), mais je suis intéressé à dong la même chose directement à partir de hook_form_submit().J'ai fait quelques essais, et je suis évidemment sortie la chaîne de script, mais appeler la fonction de soumettre ne semble pas fonctionner.

0

si la fonction de soumission crée une page complète de sortie html; Quel est le meilleur moyen de passer à un rappel de page? Je doute que le passage comme arg sur l'url fonctionnerait.

je bourré dans une session var mais peut-être un meilleur moyen?

+0

cela devrait être un commentaire –

Questions connexes