Tambahkan Fields ke Field Group secara pemrograman

15

Saya telah menggunakan modul "Field Group" dan membuat beberapa grup di backend. Sekarang saya ingin menambahkan bidang ke grup secara terprogram. Bagaimana saya bisa melakukan itu.

Saya menggunakan Hook_form_alter, saya perhatikan bahwa setiap bidang memiliki 'und'attribute' di mana grup bidang yang dimilikinya terdaftar, tetapi jika array buat dan 'und' dan tambahkan nama grup bidang ke dalamnya, itu tidak berfungsi .

Bagaimana saya harus melakukannya?

SA Malik
sumber
1
Anda dapat menggunakan API field_group. Periksa hook_field_group_build_pre_render_alter () ( drupal.org/node/1017962 )
codeinthehole

Jawaban:

20

Ini agak lama, tetapi saya ingin melakukan hal yang sama dan tidak dapat menemukan jawaban di web. Saya akhirnya mencari tahu sendiri.

Misalkan Anda membuat grup bidang melalui antarmuka CMS dengan nama "group_product_fields". Anda menambahkan beberapa bidang ke grup itu.

Sekarang Anda memiliki bidang baru yang disertakan dalam formulir secara sistematis melalui hook_form_alter. Anda ingin menambahkan bidang itu ke "group_product_fields". Berikut ini contoh bidangnya:

$form['new_product_field'] = array(
  '#type' => 'textfield',
  '#title' => t('New product field'),
  '#description' => t('Description for this new product field'),
);

Yang perlu Anda lakukan sekarang adalah menambahkan bidang baru itu ke grup bidang. Untuk melakukan itu tambahkan baris di bawah ini ke hook_form_alter. Itu dapat ditempatkan di mana saja di dalamnya.

$form['#group_children']['new_product_field'] = 'group_product_fields';

Itu saja. Anda mungkin ingin menyesuaikan bobot bidang agar diposisikan sesuai keinginan. Tetapi pada akhirnya ini sangat sederhana. :)

Rafael Alencar
sumber
Ini harus menjadi jawaban yang diterima, IMO.
m.stenta
6

Mengutip setelah menambahkan Bidang ke grup :

$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);
Maciej Zgadzaj
sumber
3
Saya ingin mengubah formulir!
SA Malik
3
Maka saya tidak mengerti mengapa Anda ingin menggunakan modul Field Group? Cukup tentukan fieldset dan pindahkan bidang Anda ke sana. Misalnya: drupal.stackexchange.com/questions/4049/…
Maciej Zgadzaj
Kita bisa menggunakan 'mode' => 'form'atau 'mode' => 'default'bukannya 'mode' => 'full', atau hanya menghilangkan modesama sekali. Setiap view_mode_name, terima kasih @Maiq Fash
graceman9
Ini memberikan cara untuk mendefinisikan kembali definisi bidang, bukan untuk melakukan form_alter - bukan apa yang diminta OP.
aaronbauman
1

Tidak yakin cara kerjanya untuk Anda. Karena nama kunci array harus cocok dengan nama bidang basis data. Dan mereka:

| entitas_type | varchar (32)
| bundel | varchar (128)

| mode | varchar (128)

Saya harus menggunakan format berikut untuk membuatnya berfungsi. beri tahu saya jika saya melakukan sesuatu yang konyol di sini.

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

Lihatlah hook_field_group_build_pre_render_alter ().

Ini memberi Anda kesempatan untuk mengubah struktur grup Anda secara terprogram.

Misalnya, pindahkan bidang "example_field" ke grup "group_example" dari elemen bentuk root:

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
  }
}
kode masuk ke lubang
sumber
0

Pertama, cari nama grup mesin grup Anda di panel CMS kemudian di form Anda lakukan

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

untuk instanst, saya telah menambahkan email bidang khusus ke User form field groupgrup bidang:

$form['#group_children']['mail'] = 'group_user_form_field_group';
Yusef
sumber