【问题标题】:Drupal: How to use fieldsets in hook_field_widget_formDrupal:如何在 hook_field_widget_form 中使用字段集
【发布时间】:2011-04-18 16:32:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: drupal forms drupal-7 fieldset


    【解决方案1】:

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

    希望对你有所帮助!

    【讨论】:

    • 我投票赞成这个答案,因为它肯定会对其他搜索字段集信息的人有所帮助,但这不是我的问题。我在一个字段集中有一些表单字段,还有一些在一个字段集之外,而里面的那些没有保存。
    【解决方案2】:

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

    编辑:正如@alexkb 的评论所解释的那样,文章作者更新了他的custom field sample 并删除了#process hack。如需更好的解决方案,请使用 GitHub 代码。

    【讨论】:

    • 您链接到的文章谈到了#process,但您会注意到作者已更新他的sample code on github 以使用hook_field_presave() - 这是一种比#process hack 更好的方法。不过,我正在投票赞成你的答案,因为它让我找到了一个我认为我无法解决的解决方案,谢谢!
    • 我自己找到了使用 hook_field_presave 的解决方案,但请注意,使用该解决方案代码 ` '#default_value' => isset($item['value']) ? $item['value'] : ''` 在附加到像段落这样的实体的字段的情况下不起作用
    【解决方案3】:

    查看physical module。基本做到:

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

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

    $element['subfield'] = array (...);
    

    【讨论】:

      猜你喜欢
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多