Drupal:如何在hook_field_widget_form中使用fieldsets

时间:2011-04-18 16:32:58

标签: drupal forms drupal-7 fieldset

所以我有我的hook_field_schema定义列,并设置了hook_field_widget_form并正确保存了所有列值。

但是,只要我将两个字段放在字段集中,这些值就永远不会保存或更新。我试过设置#tree =>在整个地方都错了,这也没有用。

我错过了什么?它只是不受支持吗?我应该使用form_alter挂钩或其他东西将它们移动到字段集中吗?

3 个答案:

答案 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 (...);