Drupal 7, как динамически заполнить поле на основе суммирования двух других полей?

у меня два поля

$form["field_num_males"]
$form["field_num_females"]

Мне нужно динамически заполнить поле $form["field_gender_total"] их суммированием перед отправкой (AJAX).

Как это можно сделать с Drupal 7?

Спасибо!


person perpetual_dream    schedule 25.02.2012    source источник


Ответы (2)


Да, это можно сделать с помощью Ajax. Следующий код автоматически обновит итог при обновлении текстового поля:

function gender_total_menu()
{
    $items = array();

    $items['test'] = array(
        'title'           => Gender total,
        'page callback'   => 'drupal_get_form',
        'page arguments'  => array('gender_total_form'),
        'access callback' => array(TRUE),
        'type'            => MENU_CALLBACK,
    );

    return $items;
}

function gender_total_form($form, &$form_state)
{
    $total = 0;

    if (array_key_exists('values', $form_state) &&
        array_key_exists('field_num_males', $form_state['values']) &&
        array_key_exists('field_num_females', $form_state['values'])
    ) {
        $total = $form_state['values']['field_num_males'] + $form_state['values']['field_num_females'];
    }

    $form = array();

    $form["field_num_males"] = array(
        '#type'          => 'textfield',
        '#title'         => t("Number of males"),
        '#default_value' => 0,
        '#ajax' => array(
            'callback' => 'ajax_update_callback',
            'wrapper'  => 'wrapper',
        ),
    );

    $form["field_num_females"] = array(
        '#type'          => 'textfield',
        '#title'         => t("Number of females"),
        '#default_value' => 0,
        '#ajax' => array(
            'callback' => 'ajax_update_callback',
            'wrapper'  => 'wrapper',
        ),
    );

    $form['total'] = array(
        '#markup' => '<p> Total: ' . $total . '</p>',
        '#prefix' => '<div id="wrapper">',
        '#suffix' => '</div>',
    );

    return $form;
}

function ajax_update_callback($form, $form_state)
{
    return $form['total'];
}
person Triss    schedule 29.04.2016

Попробуйте модуль Вычисляемое поле.

Вычисляемое поле — это очень мощный полевой модуль CCK, который позволяет вам добавлять настраиваемые «вычисляемые поля» к вашим типам контента. Эти вычисляемые поля заполняются значениями, которые вы определяете с помощью кода PHP. Вы можете использовать все, что доступно для Drupal, включая другие поля...

person nmc    schedule 25.02.2012
comment
Заполняет ли он поля на лету при заполнении формы? Я думаю, что вычисляемое поле скрыто и сохраняется в базе данных.... - person perpetual_dream; 25.02.2012