Submitted by paulguy on
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 !
Bonjour, Je me permet de
Permalien Soumis par vallou le 21 Avril, 2011 - 10:03
Bonjour,
Je me permet de réouvrir ce post afin de savoir si vous avez trouvé une solution à ce problème ?
Merci
Bonjour, Et en essayant :
Permalien Soumis par jeanfi le 21 Avril, 2011 - 22:16
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
Permalien Soumis par paulguy le 22 Avril, 2011 - 09:48
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.