开发者

Drupal select list only submitting first character

I have a select list I've created in a form alter, however, when I select an option and submit the value, only the first digit gets stored in the database. I know this has something to do with how the array is formatted, but I can't seem to get it to submit properly.

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']));

Below is the function that returns the associative array. It is returning the proper options, as I can view the correct value/option 开发者_StackOverflow中文版in the HTML source when the page loads

//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;
         }

Update:

Drupal 6: Only inserting first character of value to MySQL

I had a similar issue with the same field. However, in that case, I knew the value I wanted to submit, and I was able to assign the value to the field in the form alter, before the form was submitted. The difference with this issue, is that I don't know the value of the field until it is submitted, so I can't "assign" it in the form alter. How can I assign it the same way in the submit handler.


Edit after question update (and discovery of root problem within the linked separate question):

As you are trying to manipulate CCK fields, and those have pretty special handling mechanisms compared to 'standard' Drupal FAPI form elements, you should probably read up on CCK form handling in general, and hook_form_alter() and CCK fields and CCK hooks in particular. Glancing at those documentations (and the other CCK articles linked in the left sidebar), it looks like there should be a straight forward solution to your problem, but it might require some digging.

As a potential 'quick fix', you could try keeping your current approach, and adjust the submitted value on validation, somewhat like so:

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);
}

NOTE: This is untested code, and I have no idea if it will work, given that CCK will do some stuff within the validation phase as well. The clean way would surely be to understand the CCK form processing workflow first, and manipulating it accordingly afterward.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜