所以我有我的hook_field_schema定义列,并设置了hook_field_widget_form并正确保存了所有列值。
但是,只要我将两个字段放在字段集中,这些值就永远不会保存或更新。我试过设置#tree =>在整个地方都错了,这也没有用。
我错过了什么?它只是不受支持吗?我应该使用form_alter挂钩或其他东西将它们移动到字段集中吗?
答案 0 :(得分:4)
我遇到了同样的问题,找不到解决方法。在尝试了很多东西后,事实证明这是一种非常不合逻辑的事情。嗯,在Drupal新手的眼中。
起初我有这样的东西(剥离版本):
$element['mymodulefieldset'] = array(
'#title' => 'Fieldset title',
'#type' => 'fieldset',
);
并在字段集中添加了字段:
$element['mymodulefieldset']['fieldname'] = array(
'#title' => "Field title",
'#type' => 'textfield',
'#default_value' => '',
);
在尝试了很多不同的场景后,我发现下一行代码确实(有点)工作。我没有插入字段集,而是将元素转换为如下字段集:
$element += array(
'#type' => 'fieldset',
'#tree' => true
);
然后我在元素中添加了字段:
$element['fieldname'] = array(
'#title' => "Field title",
'#type' => 'textfield',
'#default_value' => '',
);
注意:#title和#weight等变量由“主页»管理»结构»内容类型»[您的内容类型]”控制,其他变量(如#collapsible和#collapsed)可以在这里定义。
希望这会帮助你!
答案 1 :(得分:3)
我知道这是一个老问题,但是这个问题有一个解决方案,解释in this artice,#process
部分用于正确保存字段。
编辑:正如@alexkb的评论所解释的那样,该文章的作者更新了他的custom field sample并删除了#process hack。要获得更好的解决方案,请使用GitHub代码。
答案 2 :(得分:1)
查看physical module。基本上做:
$element['#type'] = 'fieldset'
您可以使用以下内容定义子字段:
$element['subfield'] = array (...);