私はWebform 6x 3.11を使用しており、nodeIDを_hidden_key
_という非表示フィールドに渡しました。 hook_form_alter()
を実装するカスタムモジュールを作成しました。これにより、(送信されるデータとともに)追加データを送信結果に追加しようとしています。
この追加データは、非表示フィールドの値に対して実行されるいくつかの計算に基づいています。つまり、nodeIDに基づいてノードに関する詳細を取得します。これが私が現在持っているものです:
_<?php
function custom_form_proc_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'webform_client_form_33') {
$form['#submit'][] = 'custom_form_proc_submit';
}
}
function custom_form_proc_submit($form, &$form_state) {
$node = node_load($form_state['values']['hidden_key']);
$pool_title = $node->title;
$pool_category = $node->field_category[0]['value'];
// ?????
}
?>
_
あなたが私の_?????
_を見るところは、私が行き詰まっているところです。フォームで送信されるデータに加えて、これらの2つのカスタムフィールドを送信結果に追加して、次のようにします。
氏名:氏と氏
メールアドレス: [email protected]
プールカテゴリ: _$pool_category
_
プールタイトル: _$pool_title
_
在庫状況:はい
よろしくお願いします!ありがとうございました!
解決済み:大丈夫、少し遊んだ後、これは実際には簡単で予想よりもずっと簡単でした。
最初に、nodeIDを隠しフィールドに渡す代わりに、同様にスタックしているものに対してこのオプションを使用しました。
function custom_form_proc_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'webform_client_form_33') {
$node = node_load($_GET["n"]);
$form['submitted']['pool_title']['#default_value'] = $node->title;
}
}
フォームがレンダリングされると、無効になったテキストフィールドpool_title
は自動的に入力され、結果とともに送信されます。これはこれほど単純ではないことを教えてくれますが、誰かがこのアプローチの問題を予見した場合(他の検証/電子メール送信/データストアなど)
Webフォームの送信には、hook_webform_submission_insert($node, $submission)
を使用するのが最適です。$submission->data
には、フォームコンポーネントIDに対して配置されたすべての送信された値が含まれます。
ユーザー登録フォームとしてWebフォームをどのように配置したか、私の実装を参照してください。
function user_register_webform_submission_insert($node, $submission){
// Load information about form components
$comps = $node->webform['components'];
$fields = array();
//Extract the component info to get form_key=>cid to resolve relation
foreach($comps as $cid => $comp_info){
$fields[$comp_info['form_key']] = $cid;
}
// Load the submitted data (field values)
$data = $submission->data;
//Prepare a user info
$user = array(
'mail' => $data[$fields['mail']]['value'][0],
'name' => $data[$fields['name']]['value'][0],
'pass' => user_password(8),
'status' => 1,
'init' => $data[$fields['mail']]['value'][0],
'roles' => array(2, 3),
);
$account = user_save(null, $user);
}
それを行う最も簡単な方法は、計算値を格納する別の非表示フィールドを作成することだと思います。次に、 hook_webform_submission_presave()
を使用して計算を実行し、結果を$submission->data[$cid]
に格納できます。ここで、$cid
は宛先コンポーネントのコンポーネントIDです。