GETフォームの作成方法


10

たとえば、管理領域のフィルターフォームはGETフォームにするのが最適です。これにより、ブックマークが可能になり、ページャーページ間でフィルターを維持できます。

このようなフォームにform_apiを最適に使用するにはどうすればよいですか?_validateフックは送信されますか?_submitフックは省略できますか?

たとえば、ビューに公開されたフィルターはこのように機能します。しかし、これを処理するビューのコードは複雑で複雑であり、複雑すぎて、単純なフィルターフォームでカスタムインターフェイスを開発する場合の良い例として使用できません。


質問がわかりません。GET-dataを取得するために任意のフォームを作成またはhook_alterすることができます(それが意味する場合)。
Letharion 2012年

質問への参照を含めて質問を更新しました。
2012年

回答:


11

次のような形式の#methodパラメータを使用します。

<?php
  $form['#method'] = 'get';
?>

承知しました。それは一部です。しかし、検証、フックの送信などはどうでしょうか。セットですか?
2012年

2
フォームの送信および検証関数を暗黙的に呼び出すには、フォームのメソッドをpostに設定する必要があります。
レスターピーボディ

関連:form_dataキーalways_processおよびmethodフォーム定義で設定して、validate + processフックが実行されるようにすることもできます。しかし、これの使用例を見つけることができずform_statemethodキーがpost!に設定されたままになります。
artfulrobot 2014

4

誰かがこの質問に出くわした場合に備えて、これはより完全な現実の、しかし非常に単純な例です:)

フォーム定義する必要があります

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

そして、あなたはそれを使うことができます

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

最後の行は、block ['content']など、必要なものであれば何でもかまいません。


検索フォームの場合は$form_state['redirect'] = false;、フォームが送信された後のリダイレクトを無効にするために、送信ハンドラーを追加することもできます。
Ali Gangji 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.