Answers:
这有点旧,但我想做同样的事情,但找不到网络上的答案。我最终自己弄清楚了。
假设您通过CMS界面创建了一个名为“ group_product_fields”的字段组。您向该组添加了一些字段。
现在,您可以通过hook_form_alter以编程方式将新字段包含在表单中。您想要将该字段添加到“ group_product_fields”。这是该字段可能的示例:
$form['new_product_field'] = array(
'#type' => 'textfield',
'#title' => t('New product field'),
'#description' => t('Description for this new product field'),
);
您现在要做的就是将新字段添加到字段组中。为此,将以下行添加到hook_form_alter中。它可以放置在其内部的任何位置。
$form['#group_children']['new_product_field'] = 'group_product_fields';
就这样。您可能希望调整字段权重,以便根据需要定位它。最终,这确实很简单。:)
以编程方式将字段添加到字段组后报价:
$groups = field_group_read_groups(array(
'entity_type' => 'node',
'bundle' => 'article',
'mode' => 'full'
));
$your_group = $groups['node']['article']['form']['group_your_group'];
$your_group->children[] = 'field_your_new_field';
field_group_group_save($your_group);
'mode' => 'form'
或'mode' => 'default'
代替'mode' => 'full'
,或者完全省略mode
。任何view_mode_name,谢谢@Maiq Fash
看一下hook_field_group_build_pre_render_alter()。
这为您提供了以编程方式更改组结构的机会。
例如,移动至域“example_field” 到从根形式元素的基团“group_example”:
function EXAMPLE_forms_field_group_build_pre_render_alter(&$form) {
if (example_condition()) {
$form['group_example'] = $form['group_example']['example_field'];
unset($form['example_field']);
// Further adjustments as necessary
}
}