プログラムでフィールドグループにフィールドを追加する


15

「フィールドグループ」モジュールを使用し、バックエンドでいくつかのグループを作成しました。今、プログラムでグループにフィールドを追加したいと思います。どうやってやるの。

私はHook_form_alterを使用していますが、すべてのフィールドにはそれが属するフィールドグループがリストされている「und」属性がありますが、作成して「und」配列とフィールドグループ名を追加すると機能しません。

どうすればいいですか?


1
field_group APIを使用できます。チェックアウトhook_field_group_build_pre_render_alter()(drupal.org/node/1017962
codeinthehole

回答:


19

これは少し古いですが、私は同じことをしたかったので、ウェブ上で答えを見つけることができませんでした。私は自分でそれを理解することになりました。

「group_product_fields」という名前で、CMSインターフェースを介してフィールドグループを作成したとします。そのグループにいくつかのフィールドを追加しました。

これで、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
フォームを変更したい!
SAマリク

3
次に、フィールドグループモジュールを使用する理由がわかりません。フィールドセットを定義して、フィールドをそこに移動するだけです。たとえば、次のようにdrupal.stackexchange.com/questions/4049/...
マチェイZgadzaj

'mode' => 'form'またはの'mode' => 'default'代わりにを使用するか'mode' => 'full'、まったく省略modeします。すべてのview_mode_name、ありがとう@Maiq Fash
graceman9

これは、OPが要求していることではなく、form_alterを実行するのではなく、フィールド定義を再定義する方法を提供します。
アーロンバウマン

1

それがあなたにとってどのように機能したかわからない 配列キー名はデータベースフィールド名と一致する必要があるためです。そして彼らは:

| entity_type | 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';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.