So erstellen Sie ein GET-Formular

10

Beispielsweise kann ein Filterformular in Administratorbereichen am besten GET-Formulare sein. Auf diese Weise können sie mit Lesezeichen versehen werden und Filter können über Pager-Seiten hinweg verwaltet werden.

Wie kann man form_api am besten für solche Formulare verwenden? Werden die _validate-Hooks eingereicht? Kann der _submit-Hook weggelassen werden?

Beispielsweise funktionieren Filter, die Ansichten ausgesetzt sind, auf diese Weise. Der Code in Ansichten, die dies behandeln, ist jedoch kompliziert und komplex und zu komplex, um als gutes Beispiel für die Entwicklung benutzerdefinierter Schnittstellen mit einfachen Filterformularen verwendet zu werden.

berkes
quelle
Ich verstehe die Frage nicht. Sie können jedes Formular erstellen oder hook_alter, um GET-Daten abzurufen, wenn Sie das meinen.
Letharion
Ich habe die Frage mit einem Verweis auf ein Beispiel aktualisiert.
berkes

Antworten:

11

Verwenden Sie den Parameter #method des Formulars wie folgt:

<?php
  $form['#method'] = 'get';
?>
Alexandru Badiu
quelle
Sicher. Das ist ein Teil. Aber wie wäre es mit Validierung, Submit-Hooks und so weiter? Sind die eingestellt?
berkes
2
Die Methode eines Formulars muss so eingestellt sein, dass sie veröffentlicht wird, damit die Funktionen zum Senden und Überprüfen implizit aufgerufen werden können.
Lester Peabody
Verwandte: form_dataSchlüssel always_processund methodkönnen auch in der Formulardefinition festgelegt werden, was dazu führt, dass validate + process-Hooks ausgeführt werden. Aber ich kann kein Anwendungsbeispiel dafür finden und am Ende habe ich immer noch form_stateeinen methodSchlüssel, der auf gesetzt ist post!
Artfulrobot
4

Nur für den Fall, dass jemand auf diese Frage stößt, ist dies ein vollständigeres, aber sehr einfaches Beispiel :)

Sie möchten das Formular definieren

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;
}

und dann können Sie es verwenden

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

Die letzte Zeile könnte ein Block ['Inhalt'] sein oder was auch immer Sie brauchen.

Mojzis
quelle
Bei Suchformularen möchten Sie möglicherweise auch $form_state['redirect'] = false;den Submit-Handler eingeben, um die Umleitung nach dem Senden des Formulars zu deaktivieren.
Ali Gangji