以编程方式将字段添加到字段组


15

我使用了“字段组”模块,并在后端创建了一些组。现在,我想以编程方式向该组添加一个字段。我怎样才能做到这一点。

我正在使用Hook_form_alter,我注意到每个字段都有一个'und'属性,其中列出了它所属的字段组,但是如果创建并添加'und'数组并为其添加字段组名称,则它不起作用。

我该怎么办?


1
您可以使用field_group API。结帐hook_field_group_build_pre_render_alter()(drupal.org/node/1017962
codeinthehole

Answers:


20

这有点旧,但我想做同样的事情,但找不到网络上的答案。我最终自己弄清楚了。

假设您通过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';

就这样。您可能希望调整字段权重,以便根据需要定位它。最终,这确实很简单。:)


IMO,这应该是公认的答案。
m.stenta

6

编程方式将字段添加到字段组后报价:

$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);

3
我想更改表格!
马里克

3
然后,我看不到为什么要使用“字段组”模块?只需定义一个字段集并在其中移动字段即可。例如:drupal.stackexchange.com/questions/4049/...
马切伊Zgadzaj

我们可以使用'mode' => 'form''mode' => 'default'代替'mode' => 'full',或者完全省略mode。任何view_mode_name,谢谢@Maiq Fash
graceman9

这提供了一种重新定义字段定义的方法,而不是执行form_alter-而不是OP的要求。
aaronbauman

1

不知道它如何为您工作。因为数组键名必须与数据库字段名匹配。他们是:

| 实体类型| varchar(32)
| 捆绑包 varchar(128)

| 模式 varchar(128)

我必须使用以下格式使其正常工作。让我知道我是否在这里做傻事。

$groups = field_group_read_groups(array(
  'entity_type' => 'node',
  'bundle' => 'bundle type',
  'mode' => 'view_mode_name'));

1

看一下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
  }
}

0

首先,在CMS面板中找到您的字段组计算机名称,然后在表单中执行alter do

$form['#group_children']['FIELD_MACHINE_NAME'] = 'GROUP_MACHINE_NAME';

为了方便起见,我在User form field group字段组中添加了一个自定义字段邮件:

$form['#group_children']['mail'] = 'group_user_form_field_group';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.