Programowo dodaj pola do grupy pól


15

Użyłem modułu „Field Group” i utworzyłem kilka grup w backend. Teraz chcę programowo dodać pole do grupy. Jak mogę to zrobić.

Korzystam z Hook_form_alter, zauważyłem, że każde pole ma atrybut „und”, w którym wymieniona jest grupa pól, do której należy, ale jeśli tablica create i „und” i doda do niego nazwę grupy pól, to nie działa .

Jak mam to zrobić?


1
Możesz użyć interfejsu API grupy_pola. Zamówienie hook_field_group_build_pre_render_alter () ( drupal.org/node/1017962 )
codeinthehole

Odpowiedzi:


20

To jest trochę stare, ale chciałem zrobić to samo i nie mogłem znaleźć odpowiedzi w Internecie. Skończyło się to samodzielnie.

Załóżmy, że utworzyłeś grupę pól poprzez interfejs CMS o nazwie „group_product_fields”. Dodano kilka pól do tej grupy.

Teraz masz nowe pole dołączane do formularza programowo poprzez hook_form_alter. Chcesz dodać to pole do „group_product_fields”. Oto przykład tego, czym może być pole:

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

Wszystko, co musisz teraz zrobić, to dodać to nowe pole do grupy pól. Aby to zrobić, dodaj poniższy wiersz do hook_form_alter. Można go umieścić w dowolnym miejscu w środku.

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

To wszystko. Możesz dostosować wagę pola, aby ustawiała się tak, jak chcesz. Ale w końcu jest to naprawdę proste. :)


To powinna być zaakceptowana odpowiedź, IMO.
m.stenta

6

Cytowanie po Programowo dodaj pola do grupy pól :

$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
Chcę zmienić formularz!
SA Malik

3
Więc nie rozumiem, dlaczego chcesz użyć modułu Field Group? Po prostu zdefiniuj zestawy pól i przenieś tam swoje pola. Na przykład: drupal.stackexchange.com/questions/4049/…
Maciej Zgadzaj

Możemy użyć 'mode' => 'form'lub 'mode' => 'default'zamiast 'mode' => 'full'lub po prostu modew ogóle pominąć . Wszelkie view_mode_name, dzięki @Maiq Fash
graceman9

Zapewnia to sposób na ponowne zdefiniowanie definicji pól, a nie wykonywanie form_alter - nie tego, o co prosi OP.
aaronbauman

1

Nie jestem pewien, jak to dla ciebie zadziałało. Ponieważ nazwa klucza tablicy musi być zgodna z nazwą pola bazy danych. I oni są:

| typ_jednostki | varchar (32)
| pakiet | Varchar (128)

| tryb | Varchar (128)

Muszę użyć następującego formatu, aby go uruchomić. daj mi znać, jeśli robię tutaj coś głupiego.

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

1

Spójrz na hook_field_group_build_pre_render_alter ().

Daje to możliwość programowej zmiany struktury grup.

Na przykład przenieś pole „example_field” do grupy „group_example” z elementu głównego formularza:

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

Najpierw znajdź nazwę komputera grupy pól w panelu CMS, a następnie w formularzu alter do

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

na przykład dodałem niestandardową pocztę polową do User form field groupgrupy pól:

$form['#group_children']['mail'] = 'group_user_form_field_group';
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.