4

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

但是,一旦我将两个字段放入字段集中,这些值就永远不会保存或更新。我已经尝试在整个地方设置#tree => FALSE,但这也不起作用。

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

4

3 回答 3

5

我遇到了同样的问题,找不到解决方案。在尝试了很多事情之后,结果证明是简单到不合逻辑的事情。好吧,在 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)可以在此处定义。

希望这可以帮助你!

于 2011-05-13T13:24:28.827 回答
4

我知道这是一个老问题,但是这个问题有一个解决方案,在这篇文章中有解释,这#process部分是用来正确保存字段的。

编辑:正如@a​​lexkb 的评论所解释的,文章的作者更新了他的自定义字段示例并删除了#process hack。要获得更好的解决方案,请使用 GitHub 代码。

于 2012-08-29T12:29:57.340 回答
1

物理模块。基本上做:

$element['#type'] = 'fieldset'

您可以使用以下方式定义子字段:

$element['subfield'] = array (...);
于 2017-03-23T04:21:38.483 回答