Программно перезаписать значение поля ноды.

Главные вкладки

Аватар пользователя Im Im 19 декабря 2014 в 15:40

Понимаю, что нижеописанный способ является не совсем кошерным, но других способов я не нашел.

Дано - поле ссылка на термин, виджет автозаполнение

Что нужно - в поле, через запятую, пользователь вводит два целочисленных значения, нажимает сохранить, и значение вновь введенного поля перезаписывается строкой данных - представляющей из себя пошаговый диапазон между этими двумя числами. Например, пользователь вводит 10, 3, жмет сохранить и поле перезаписывается значением 10,9,8,7,6,5,4,3

Логику формирования строки я осуществил, вопрос как перезаписать значение поля? Пробовал через form_alter менять у поля дефолтное значение, но оно срабатывает только при повторном сохранении, то есть пользователь ввел 10,3 сохранил, открыл ноду, в поле уже 10,9,8,7,6,5,4,3, сохранил и только после этого поле перезаписывается в базе.

Есть мысли как, когда и чем воспользоваться, чтобы после сейва значение поля сохранялось.

Буду благодарен за мысли по делу.

Комментарии

Аватар пользователя yaro yaro 22 декабря 2014 в 5:51
/**
 * Implements hook_form_alter().
 */

function module_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'form') {
    $form['#submit'][] = 'module_form_submit';
  }
}

/**
 * Submit callback for form FORM_ID.
 */

function module_form_submit(&$form, &$form_state) {
  $values = &$form_state['values'];
  if (!empty($values['field_my_field'])) {
    $value = module_custom_logic($values['field_my_field'][LANGUAGE_NONE][0]['value']);
        $values['field_my_field'][LANGUAGE_NONE][0]['value'] = $value;
  }
}