Drupal选择列表仅提交第一个字符

时间:2010-03-03 03:03:42

标签: forms drupal drupal-6

我有一个我在表单中创建的选择列表,但是,当我选择一个选项并提交值时,只有第一个数字存储在数据库中。我知道这与数组的格式有关,但我似乎无法正确提交。

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: Only inserting first character of value to MySQL

我在同一领域遇到了类似的问题。但是,在这种情况下,我知道我想要提交的值,并且我能够在提交表单之前将值分配给alter表单中的字段。与此问题的不同之处在于,在提交之前我不知道该字段的值,因此我无法以alter的形式“分配”它。如何在提交处理程序中以相同的方式分配它。

1 个答案:

答案 0 :(得分:1)

问题更新后修改(并在链接的单独问题中发现根问题):

当您尝试操作CCK字段时,与“标准”Drupal FAPI表单元素相比,它们具有非常特殊的处理机制,您可能应该阅读CCK表单处理,hook_form_alter() and CCK fields和{{特别是3}}。浏览这些文档(以及左侧边栏中链接的其他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表格处理工作流程,然后相应地操作它。