Comment créer un formulaire GET

10

Par exemple, un formulaire de filtre sur les zones d'administration peut être au mieux des formulaires GET, de cette façon, ils peuvent être mis en signet et les filtres peuvent être maintenus sur les pages de pager.

Comment utiliser au mieux form_api pour de tels formulaires? Les crochets _validate seront-ils soumis? Le crochet _submit peut-il être omis?

Par exemple, les filtres exposés aux vues fonctionnent de cette façon; Mais le code dans les vues qui traitent cela est compliqué et complexe, trop complexe pour être utilisé comme bon exemple pour le développement d'interfaces personnalisées avec des formulaires de filtre simples.

berkes
la source
Je ne comprends pas la question. Vous pouvez créer ou hook_alter n'importe quel formulaire pour récupérer des données GET, si c'est ce que vous voulez dire.
Letharion
J'ai mis à jour la question avec une référence à un exemple.
berkes

Réponses:

11

Utilisez le paramètre #method du formulaire comme ceci:

<?php
  $form['#method'] = 'get';
?>
Alexandru Badiu
la source
Sûr. C'est une partie. Mais qu'en est-il de la validation, soumettre des hooks, etc. Sont l'ensemble?
berkes
2
La méthode d'un formulaire doit être définie pour publier pour que ses fonctions de soumission et de validation soient appelées implicitement.
Lester Peabody
Connexes: les form_dataclés always_processet methodpeuvent également être définies dans la définition de formulaire, ce qui entraîne l'exécution de hooks de validation + processus. Mais je ne trouve pas d'exemple d'utilisation pour cela et je finis toujours par form_statecontenir un methodjeu de clés sur post!
artfulrobot
4

Juste au cas où quelqu'un tomberait sur cette question, ceci est un exemple plus complet de la vie réelle, mais très simple :)

vous voudrez définir le formulaire

function YOURMODULE_search_form($form, &$form_state) {
  $form['#method'] = 'get';
  $form['#action'] = '/search';
  $form['#attributes'] = array('class' => array('mymod-search'));
  $form['search'] = array(
    '#type' => 'textfield',
    '#size' => 20,
  );
  return $form;
}

et ensuite vous pouvez l' utiliser

$searchform = drupal_get_form('YOURMODULE_search_form');
$output .= drupal_render($searchform);

La dernière ligne peut être un bloc ['contenu'] ou tout ce dont vous avez besoin.

mojzis
la source
Pour les formulaires de recherche, vous souhaiterez peut-être également mettre $form_state['redirect'] = false;en place le gestionnaire d'envoi pour désactiver la redirection après l'envoi du formulaire.
Ali Gangji