Affichage des résultats apres envois du formulaire

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjours à tous,

Je m'arrache les cheveux sur l'API Form depuis ce matin sans trouvé de solution pour mon problème.
Ce que je recherche à faire doit pourtant etre bien simple :

J'ai écrit un petit module affichant un formulaire. Lors du 'submit' via le bouton du meme nom j'aimerais effectuer une requete avec la valeur des champs de mon formulaire, puis charger une page m'affichant ce meme formulaire rempli des meme valeurs (fait office de rappel et donne la possiblité de faire une autre recherche) suivi du resultat de la requete sous form de liste.

J'ai implémenter les hook suivant :

les menus :

function loyers_menu() {
  $items = array();
 
   $items['loyers/niveaux'] = array(
        'page callback' => 'drupal_get_form',
       'page arguments' => array('loyers_niveaux_form'),
       'access arguments' => array('view loyers'),
     'type' => MENU_CALLBACK
   );
$items['loyers/niveaux/resultat'] = array(
       'title' => t('Liste de références'),
        'page callback' => 'loyers_niveaux_resultat',
       'access arguments' => array('view loyers'),
     'type' => MENU_CALLBACK
   );
return $items;
}

le formulaire :

function loyers_niveaux_form($form_state) {
  $form = array();
  
        ...

  $form['logement']['type'] = array (
        '#type' => 'select',
        '#title' => 'Type de logement',
     '#default_value' => $form_state['value']['surface'],
      '#options' => array (
         'null' => '',
           'studio' => 'Studio',
           '2p' => '2 pièces',
         '3p' => '3 pièces',
         '4p' => '4 pièces et plus',
     )
  );
$form['logement']['dep'] = array (
     '#type' => 'select',
        '#title' => 'Département',
      '#default_value' => $form_state['value']['dep'],
      '#options' => array (
         'null' => '',
           '75' => 'Paris',
            '78' => 'Yvelines',
         '92' => 'Hauts-de-Seine',
           '93' => 'Seine-Saint-Denis',
            '94' => 'Val-de-Marne'
      )
  );

   $form['submit'] = array(
     '#type' => 'submit',
        '#value' => t('Rechercher'),
        '#submit' => array('olap_loyers_niveaux_form_submit')
   ); 
  
   return $form;
}

Et c'est le submit qui pose probleme ...

function loyers_niveaux_form_submit($form, &$form_state) {        
 
        //requete de recherche
        //$liste des resultats

        // affichage
   $redirect = check_plain('loyers/niveaux/resultat/');
$form_state['redirect'] = $redirect;
}

Avec la fonction d'affichage des resultats :

function loyers_niveaux_resultat () {
    // On recharge le formulaire
   $output = drupal_render_form('loyers_niveaux_form');

   // On affiche la liste
$output .= '<div>';
    $output .= '<p>RESULTAT</p>';
    $output .= '</div>';
  
   return $output;
}

Vous remarquerez les trous dans mon hook_submit ^^. Mon probleme est de passer les resultats de la requete a la fonction d'affichage, surement via le lien de menu ...Mais en ai-je vraiment besoin de se lien (et du coup de la redirection ?)
Donc me voila ici a demander de l'aide car depuis quelques heures maintenant je cherche je cherche mais impossible de trouver une solution :(
merci d'avance !

Forum : 
Version de Drupal : 

Bonjour,

Et en essayant :

  $form['submit'] = array(
     '#type' => 'submit',
        '#value' => t('Rechercher'),
        '#submit' => array('loyers_niveaux_form_submit')
   );

Est-ce que c'est mieux ?

Bonjour,

Le problème date et est heureusement résolu depuis le temps.

Il y avait effectivement une erreur sur l'appel à la fonction submit mais le problème était, une fois le traitement effectué, comment renvoyer sur une page de résultat tout en gardant les valeurs soumises ?
La solution adopté à l'époque était de les stocker en session et d'utiliser $form_state['redirect'] mais je doute que se soit la méthode conseillée.

Une autre piste était de modifier l'action du formulaire vers la page voulu, mais il semble que le hook_submit n'est plus appelé dans ce cas.