D7: Поле API Поле не сохраняется при использовании hook_form_alter

У меня есть следующее поле (в качестве примера), созданное с помощью Field API, которое прекрасно работает. Поскольку я хочу добавить функцию автозаполнения (уже работает, здесь не показано), а также установить значение по умолчанию из $_POST переменная, я начал изменять поле с hook_form_alter,

Изменение поля работает как талисман, НО поле больше не будет сохранено в Узле и даже появится в другом месте в форме редактирования узла.

<?php
  function trian_portal_enable() {
    // create assigned License field
    if (!field_info_field('field_assigned_license')){
      $field = array(
        'field_name' => 'field_assigned_license',
        'type' => 'text',
        'cardinality' => 1,
      );
      field_create_field($field);

      $instance = array(
          'field_name' => 'field_assigned_license',
          'entity_type' => 'node',
          'label' => t('Assigned License'),
          'bundle' => 'kunden_download',
          'description' => t('Enter License assigned to this download'),
          'required' => FALSE,
          'settings' => array(
             // Here you inform either or not you want this field showing up on the user profile edit form.
              'kunden_download_node_form' => 1,
          ),
          'widget' => array(
              'type' => 'textfield',
          ),
        );
        field_create_instance($instance);
    }
  }

  function trian_portal_form_alter(&$form, $form_state, $form_id) {


    if ($form_id == 'kunden_download_node_form') {


      $form['field_assigned_license'] = array(
        '#title' => t('Assigned Licence'),
        '#type' => 'textfield',
        '#default_value' => ($_REQUEST['lid']) ? $_REQUEST['lid']: '',
        '#required' => ($_REQUEST['lid']) ? 1:0,
      );

    }
  }
?>

1 ответ

Ответ мне дал потрясающий #drupal chanel (спасибо @graper =))

Что плохого в том, что:

$form['field_assigned_license'] = array(
        '#title' => t('Assigned Licence'),
        '#type' => 'textfield',
        '#default_value' => ($_REQUEST['lid']) ? $_REQUEST['lid']: '',
        '#required' => ($_REQUEST['lid']) ? 1:0,
      );

будет в основном переопределять все, что сохраняется в $form['field_assigned_license'], Правильный подход - просто переопределить определенный параметр, который я хочу, например $form['field_assigned_customer']['und'][0]['value']['#default_value'] или объединить исходный массив с корректировками.

Другие вопросы по тегам