我有一个我在表单中创建的选择列表,但是,当我选择一个选项并提交值时,只有第一个数字存储在数据库中。我知道这与数组的格式有关,但我似乎无法正确提交。
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的形式“分配”它。如何在提交处理程序中以相同的方式分配它。
答案 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表格处理工作流程,然后相应地操作它。