Веб-форма добавляет данные вместе с отправленными значениями


Я использую веб-форму 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
Доступность: Да

Я был бы очень признателен вам за помощь! Спасибо!

Author: kiamlaluno, 2011-07-26

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);  
}
 4
Author: Shoaib Nawaz, 2011-07-26 09:00:01

Я думаю, что самый простой способ сделать это - создать еще одно скрытое поле для хранения вычисленного значения. Затем вы можете использовать hook_webform_submission_presave() для выполнения вычисления и сохранения результата в $submission->data[$cid], где $cid - идентификатор компонента целевого компонента.

 4
Author: Andy, 2011-07-26 11:19:33

РЕШЕНО: хорошо, немного поиграв, это оказалось на самом деле легко и намного проще, чем я ожидал.

Во-первых, вместо того, чтобы передавать идентификатор узла в скрытое поле, я просто выбрал эту опцию для тех, кто застрял подобным образом.

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 автоматически заполняется и отправляется вместе с результатами. Что-то подсказывает мне, что это не так просто, но если кто-нибудь предвидит проблему с этим подходом (как и в случае с другой проверкой/отправкой электронной почты/хранилищем данных

 1
Author: maGz, 2011-07-26 15:21:28