2010-11-16 6 views
1

J'ai ce formulaire qui accepte l'entrée de l'utilisateur. Ce que j'aime faire est, en fonction de cette entrée de l'utilisateur, je voudrais récupérer les données et les afficher à l'utilisateur.Comment puis-je obtenir les données? (Drupal 6.x)

Jusqu'ici, j'ai implémenté hook_menu et enregistré l'URL respective du formulaire, et implémenté une fonction de soumission référée par l'attribut "#submit" du bouton submit. J'ai également implémenté le code de récupération de données et fonctionne très bien.

Voici mon problème - Je ne sais pas comment afficher les données récupérées. J'ai essayé plusieurs approches pour tenter de trouver la solution. Tout d'abord, avec la fonction de thème, en espérant que l'impression de la valeur de retour afficherait les données. Deuxièmement, mettre l'élément "#action" du tableau de forme avec l'url nouvellement enregistrée, car je pensais que l'utilisation de la même url que la forme ne ferait que retourner Drupal à la place et pas mes données. Donc, je crée une variable statique et stocke toutes les données récupérées, ce qui est fait à l'intérieur de la fonction de soumission en passant. Lorsque j'ai vérifié cette variable dans le rappel de menu, cette variable n'est pas définie.

Pour résumer mon problème, la forme a différentes URL d'accès que la forme soumettre, comme

Form url – http://....?q=mymodule/form 
Submit url (value of ”#action”) – http://....?q=mymodule/execute 

, et les données que j'ai mis en fonction à l'intérieur soumettre variable statique n'est pas disponible dans le rappel de menu. Comment puis-je rendre les données disponibles?

est ici une partie de mon code -

static $retrieved_data; 

function mymodule_menu() { 
    $command = array(); 

    $command['mymodule/form'] = array(
     'title' => 'user input', 
     'page callback' => 'response', 
     'page arguments' => array('form'), 
     'access arguments' => array('access content'), 
     'type' => MENU_CALLBACK, 
    ); 

    $command['mymodule/execute'] = array(
     'title' => 'Search', 
     'page callback' => 'response', 
     'page arguments' => array('execute'), 
     'access arguments' => array('access content'), 
     'type' => MENU_CALLBACK, 
    ); 

    return $command; 
} 

function _response($paRequest){ 

    switch($paRequest){ 
     case "form": 
     return drupal_get_form("_myform"); 
     break; 

     case "execute": 
     return $retrieved_data; 
     break; 
    } 
} 

function _myform(&$form_state) { 
    $form['#action'] = url($base_path)."?mymodule/execute"; 
    ..... 
    $form['submit'] = array(
     '#type' => 'submit', 
     '#value' => t('Submit'), 
     '#submit' => array('_data_retrieve'),  
    ); 
    return $form; 
} 

function _data_retrieve($form, &$form_state){ 
    /*data retrieval code*/ 
    ........................ 
    $retrieved_data = db_fetch_object($result); 
} 

Merci un bouquet

Répondre

1

Votre méthode semble un peu compliqué là-bas. Quand je fais des systèmes avec un formulaire, j'ai tendance à le faire de cette façon. Dans votre MYMODULE_menu() je voudrais changer le 'page arguments' => array('form'), à 'page arguments' => array('NAME_OF_FORM_FUNCTION'), où NAME_OF_FORM_FUNCTION serait _myform dans ce cas. Je le renommerais en MYMODULE_MYFORMNAME.

puis créez une fonction:

MYMODULE_MYFORMNAME_SUBMIT($form, &$state) { 
    // Enter code here to save the data from the form that is stored in $state 
    // to the database with an SQL query or a node_save($node) if you are 
    // creating a node. 
} 

Après cela, vous pouvez récupérer les données de la base de données dans votre fonction _data_retrieve et appeler sur la page où vous souhaitez récupérer les données.

+0

J'ai la même suggestion d'utiliser la base de données pour stocker des données de formulaire dans le support drupal. Je pensais que je pourrais travailler autour de l'utilisation de la base de données par variable statique afin de ne pas surcharger l'accès à la base de données. Je suppose pas alors. Merci pour la suggestion. Je verrai comment cela fonctionne et je reviendrai vers vous. – Andrew