我正在使用 CCK 类型的 hook_form_alter(为您的 drupal-ers)。我的节点表单中有一个通常是选择列表的字段。但是,在这种情况下,我想隐藏选择列表,并使用 SQL 查询将其值填充到表单中。
一切都很顺利。我可以看到我想要的值出现在 HTML 源代码中,所以我知道我的查询正在正确执行。但是,当我提交表单时,它只插入值的第一个字符。我的一些测试是 566、784、1004 的值 - 列值分别是 5、7、1。
起初我以为它必须是 DB 列属性,但是当我删除了使字段隐藏并手动选择值的 form_alter 时,插入了正确的值?!?
<?php
function addSR_form_service_request_node_form_alter(&$form, $form_state) {
if (arg(0) == 'user' && is_numeric(arg(1))) {
$account = arg(1);
$club = 2589;
$form['field_sr_account'] = array( '#type' => 'hidden',
'#value' => $club
);
}
}
?>
谁能明白为什么只插入第一个字符?
注意:我尝试使用#value 和#default_value 删除并重新创建列,但它仍然只提交整数的第一个字符。另外,我通过删除提交处理程序来消除它作为可能的原因,这仍然导致只提交一个字符
更多更新 - 仍在搜索! 好的,一些很好的问题。请允许我回答他们:
- DB 列类型为整数(4)
钩子生成的 HTML 是:
输入类型="hidden" name="field_sr_account" id="edit-field-sr-account" value="2589"
最新更新:我认为问题已缩小到数组的结构。当我在处理表单更改后对该字段执行 var_dump 时,这就是我得到的。
[43] => Array
(
[#type] => hidden
[#default_value] => 2589
[#post] => Array
(
)
[#programmed] =>
[#tree] =>
[#parents] => Array
(
[0] => field_sr_account
)
[#array_parents] => Array
(
[0] => field_sr_account
)
[#weight] => 0.016
[#processed] => 1
[#description] =>
[#attributes] => Array
(
)
[#required] =>
[#input] => 1
[#process] => Array
(
[0] => form_expand_ahah
)
[#name] => field_sr_account
[#id] => edit-field-sr-account
[#value] => 2589
[#defaults_loaded] => 1
[#sorted] => 1
)
我可以将表单值设置为的字段结构是什么。它必须像 abhaga 所建议的那样......