Список выбора Drupal, отправляющий только первый символ - PullRequest
2 голосов
/ 03 марта 2010

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

function addSR_form_service_request_node_form_alter(&$form, $form_state) {
 $form['field_sr_account'] = array( '#weight' => '-50',
                                    '#type' => 'select', 
                                    '#title' => 'Select which account',
                                    '#options' => addSR_getMultiple());

 //Custom submit handler    
 $form['#submit'][] = 'addSR_submit_function';
 }

 function addSR_submit_function{
  $form_state['values']['field_sr_account'] = array('0' => array('value' => $form['#field_sr_account']));

Ниже приведена функция, которая возвращает ассоциативный массив. Он возвращает правильные параметры, так как я могу просмотреть правильное значение / параметр в источнике HTML, когда страница загружается

//The values returned are not the problem, however, the format of the array could be..
    function addSR_getMultiple(){
           $return = array();
           $return['one'] = 'Choice1'
           $return['two'] = 'Choice2'

           return $return;
         }

Обновление:

Drupal 6: только вставка первого символа значения в MySQL

У меня была похожая проблема с тем же полем. Однако в этом случае я знал значение, которое я хотел передать, и смог назначить значение полю в форме изменения перед отправкой формы. Разница в этой проблеме заключается в том, что я не знаю значения поля, пока оно не будет отправлено, поэтому я не могу «назначить» его в форме изменения. Как я могу назначить его таким же образом в обработчике отправки.

1 Ответ

1 голос
/ 03 марта 2010

Изменить после обновления вопроса (и обнаружение корневой проблемы в отдельном связанном вопросе):

Поскольку вы пытаетесь манипулировать полями CCK, и у них довольно специфические механизмы обработки по сравнению со «стандартными» элементами формы Drupal FAPI, вам, вероятно, следует ознакомиться с обработкой форм CCK в целом, а также hook_form_alter () и CCK в частности, поля и CCK . Взглянув на эту документацию (и другие статьи CCK, связанные на левой боковой панели), кажется, что должно быть прямое решение вашей проблемы, но может потребоваться некоторое копание.

В качестве потенциального «быстрого исправления» вы можете попытаться сохранить свой текущий подход и скорректировать представленное значение при проверке, примерно так:

function addSR_form_service_request_node_form_alter(&$form, $form_state) {
  $form['field_sr_account'] = array(
    '#weight' => '-50',
    '#type' => 'select', 
    '#title' => 'Select which account',
    '#options' => addSR_getMultiple()
  );

  // Add custom validation handler    
  $form['#validate'][] = 'addSR_validate_function';
}

function addSR_validate_function (&$form, &$form_state) {
  // Assemble result array as expected by CCK submit handler
  $result = array();
  $result[0] = array();
  $result[0]['value'] = $form_state['values']['field_sr_account'];
  // Set this value in the form results
  form_set_value($form['field_sr_account'], $result, $form_state);
}

ПРИМЕЧАНИЕ. Это непроверенный код, и я не знаю, сработает ли он, учитывая, что CCK также сделает некоторые вещи на этапе проверки. Безусловно, ясным способом было бы сначала понять рабочий процесс обработки формы CCK, а затем соответствующим образом манипулировать им.

...