「フィールドグループ」モジュールを使用し、バックエンドでいくつかのグループを作成しました。今、プログラムでグループにフィールドを追加したいと思います。どうやってやるの。
私はHook_form_alterを使用していますが、すべてのフィールドにはそれが属するフィールドグループがリストされている「und」属性がありますが、作成して「und」配列とフィールドグループ名を追加すると機能しません。
どうすればいいですか?
「フィールドグループ」モジュールを使用し、バックエンドでいくつかのグループを作成しました。今、プログラムでグループにフィールドを追加したいと思います。どうやってやるの。
私はHook_form_alterを使用していますが、すべてのフィールドにはそれが属するフィールドグループがリストされている「und」属性がありますが、作成して「und」配列とフィールドグループ名を追加すると機能しません。
どうすればいいですか?
回答:
これは少し古いですが、私は同じことをしたかったので、ウェブ上で答えを見つけることができませんでした。私は自分でそれを理解することになりました。
「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';
それで全部です。必要に応じて配置するために、フィールドの重みを調整することができます。しかし、最終的にこれは本当に簡単です。:)
プログラムでフィールドグループにフィールドを追加した後の引用:
$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
それがあなたにとってどのように機能したかわからない 配列キー名はデータベースフィールド名と一致する必要があるためです。そして彼らは:
| entity_type | varchar(32)
| バンドル| varchar(128)| モード| varchar(128)
動作させるには、次の形式を使用する必要があります。ここで愚かなことをしているのなら教えてください。
$groups = field_group_read_groups(array(
'entity_type' => 'node',
'bundle' => 'bundle type',
'mode' => 'view_mode_name'));
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
}
}