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.


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';
?>

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.