3

我在 Drupal 7 中有一个节点表单,为了为用户简化它,我想使用垂直选项卡功能将它分成几个部分。

使用 hook_form_FORMID_alter() 我可以毫无困难地移动字段。保存节点后,它会正确写入值,并且它们会出现在节点视图中。

但是当我重新编辑节点时,未设置移动字段的任何值,因此我实际上丢失了数据。我尝试了各种选项,包括更改 form_state['fields'][field][langcode] 中的 array_parents 值。

(我想知道在 pre_render 期间移动字段是否会更好。)

有任何想法吗?

4

2 回答 2

3

默认情况下,字段 API 字段被放入容器字段类型中。如果要将它们转换为垂直选项卡中的字段集,可以执行以下操作:

$form['field_tags']['#type'] = 'fieldset';
$form['field_tags']['#title'] = 'Tags';
$form['field_tags']['#group'] = 'additional_settings';

更好的解决方案是使用新的字段组模块,这样您就可以通过 UI 而不是在代码中进行这些修改。

于 2011-02-01T15:34:58.383 回答
2

有时,在表单创建过程的#after_build 步骤中移动字段项会更好。

在 hook_form_alter 中,您可以像这样设置您的构建后功能:

function mymodule_form_alter(&$form, &$form_state, $form_id)
{
    $form['#after_build'][] = 'mymodule_myform_after_build';
}

然后你像这样定义你的 after_build 函数:

function mymodule_myform_after_build($form)
{
   //do stuff to the form array
   return $form;
}

我认为您甚至可以在单个元素上定义 after_build 。

无论如何,这是在所有模块完成它们的工作之后更改表单的好方法。

于 2011-02-01T20:52:31.427 回答