0

ノード表示ページに選択メニューがあるシンプルなフォームがあります。コールバック関数でフォームを検証する簡単な方法はありますか? 検証とは、値がフォーム配列に実際に存在することを確認するためだけに、高度なことを意味するものではありません。たとえば、ajax を使用せずに、選択メニューに 3 つの項目があり、4 番目の項目を追加してフォームを送信しようとすると、drupal は「不正な選択が行われました。管理者に連絡してください」のようなエラーを返します。

ajax を使用すると、作成したこの 4 番目のアイテムがデータベースに保存されます。だから、次のような検証を書く必要がありますか

if ($select_item > 0 && $select_item <= 3) {
  //insert into db
}

または、アイテムが実際にフォーム配列に存在することを確認する簡単な方法はありますか? ajax がないと、フォームが操作された場合、drupal はフォームを送信しないため、あることを願っています。ありがとう。

編集: だから私は基本的に私のコールバック関数でこれが必要ですか?

$form_state = array('storage' => NULL, 'submitted' => FALSE);
$form_build_id = $_POST['form_build_id'];
$form = form_get_cache($form_build_id, $form_state);
$args = $form['#parameters'];
$form_id = array_shift($args);
$form_state['post'] = $form['#post'] = $_POST;
$form['#programmed'] = $form['#redirect'] = FALSE;
drupal_process_form($form_id, $form, $form_state);

$_POST['form_build_id'] を取得するために、データ パラメータとして送信しましたが、そうですか? form_get_cache を使用する場所には、データがないように見えます。一種の失われた今。

4

2 に答える 2

0

すでにAJAXを使用しているので、選択が合法的な選択肢のリスト内にある場合にのみフォームの送信を許可するようにjQueryを少し書いてみませんか?これは、すでに作業しているように見えるカスタムモジュール内で実行できます(drupal_add_js()を使用)。

于 2010-01-26T13:44:34.860 に答える
0

特に「簡単」というわけではありませんが、それを行う標準的な方法は、コールバックの送信にも Drupals Forms API を使用することです。そうすれば、js 以外の送信で発生するのと同じ検証が得られます。

AHAHを使用して動的フォーム要素を追加する をご覧ください。シナリオとは正確には一致しませんが (データを保存するためではなく、新しい要素を追加するためにコールバックでフォームを再構築します)、処理ワークフローの説明は非常に役に立ちます。

次に、一般的な方法で AJAX フォーム送信を提供しようとするモジュールがいくつかあります。その方法についてコードを確認できます (または、単にそれらを使用することもできます ;)。

最後に、この機能のサポートを Drupal 7のコアに組み込む努力が行われています。関連する議論も役立つかもしれません。

于 2010-01-29T08:37:19.447 に答える