Веб-форма добавляет данные вместе с отправленными значениями
Я использую веб-форму 6x 3.11 и передал Идентификатор узла в скрытое поле под названием 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
Доступность: Да
Я был бы очень признателен вам за помощь! Спасибо!
3 answers
Для отправки веб-формы лучше всего использовать hook_webform_submission_insert($node, $submission)
.$submission->data
будет содержать все отправленные значения, упорядоченные по идентификаторам компонентов формы.
Смотрите мою реализацию, как я организовал веб-форму в качестве формы регистрации пользователей.
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
- идентификатор компонента целевого компонента.
РЕШЕНО: хорошо, немного поиграв, это оказалось на самом деле легко и намного проще, чем я ожидал.
Во-первых, вместо того, чтобы передавать идентификатор узла в скрытое поле, я просто выбрал эту опцию для тех, кто застрял подобным образом.
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
автоматически заполняется и отправляется вместе с результатами. Что-то подсказывает мне, что это не так просто, но если кто-нибудь предвидит проблему с этим подходом (как и в случае с другой проверкой/отправкой электронной почты/хранилищем данных