私は送信にwebformを使用し、GETパラメータをシミュレートしようとしています(ただし、デフォルトではPOSTを使用しています)。
これがhook_form_alter()
を実装する私のコードです:
function mymodule_form_alter(&$form, &$form_state, $form_id) {
$nid = 2;
if ($form_id == 'webform_client_form_' . $nid) {
$option['query'] = array(
'name' => $form_state['values']['name'],
'email' => $form_state['values']['email'],
'gender' => $form_state['values']['gender'],
'birthday' => $form_state['values']['birthday'],
);
$form['#action'] = url('path/to/myViewsPage', $option);
}
上記のコードは私を連れて行く必要があります
'path/to/myViewsPage?name=tom&[email protected]&gender=male&birthday=12/21/2013'
しかし、私は次のエラーを得ました:
未定義のインデックス:mymodule_form_alter()の値
$form_state['values']
の定義場所を誰かに教えてもらえますか? Webformで事前定義されていませんか?
Form_alter()で、新しい送信ハンドラを追加する必要があります。
function mymodule_form_alter($form, &$form_state, $form_id) {
$nid = 2;
if ($form_id == 'webform_client_form_' . $nid) {
$form['#submit'][] = 'your_submit_handler';
}
}
Your_submit_handler()では、これらの値が利用可能になります
function your_submit_handler(&$form, &$form_state) {
$option['query'] = array(
'name' => $form_state['values']['name'],
'email' => $form_state['values']['email'],
'gender' => $form_state['values']['gender'],
'birthday' => $form_state['values']['birthday'],
);
$url = url('path/to/myViewsPage', $option);// (valid path or whatever)
$form_state['redirect'] = $url;
}
保存されているwebformノードを気にする必要はありません。リダイレクトする必要があるだけですよね。これは、デフォルトのWebフォーム送信ハンドラーと一緒に実行されます。
// echo"<pre>"; print_r($form_state); die;
/*** here you check all values of webform which is submitted ***/
$fname = $form_state['input']['submitted']['Your_field_ID'];
少しハックですが、$form['#action']
でビューへのパスを設定し、フォームをビューに直接投稿した方がいいと思います。次に、ビューページで、必要に応じてコンテキストフィルターで、フォームから投稿された値を取得します。このようにして、送信処理を完全にバイパスし、何も保存されません。
これを試して:
$form_state = form_state_defaults();
$form_build_id = $_POST['form_build_id'];
// Get the form from the cache.
$form = form_get_cache($form_build_id, $form_state);
またはフォームidを提供することにより:
クレジット: drupal_get_formでロードされたフォームの$ form_stateをどのようにロードしますか?
// Get the form.
$form = drupal_get_form('my_form_id');
// Get the default form state.
$form_state = form_state_defaults();
// Get the form and form state from the cache for the form you just got.
form_get_cache($form['#build_id'], $form_state);
Webformには、送信およびすべてにアクセスするための独自のフックがあります。 hook_webform_submission_presave() を使用できます。
データベースに保存する前に、Webフォーム送信を変更します。
パラメータ
$ node:この送信が行われたWebformノード。
$ submission:データベースに保存されようとしているWebform送信。
All Webform Module Hooks を参照してください。