Добавить поля в группу полей программно

15

Я использовал модуль «Группа полей» и создал несколько групп в бэкэнде. Теперь я хочу программно добавить поле в группу. Как мне это сделать.

Я использую Hook_form_alter, я заметил, что у каждого поля есть атрибут «und», в котором указана группа полей, к которой он принадлежит, но если массив create и «und» и добавить к нему имя группы полей, он не работает ,

Как я должен это делать?

С.А. Малик
источник
1
Вы можете использовать API field_group. Оформить заказ hook_field_group_build_pre_render_alter () ( drupal.org/node/1017962 )
codeinthehole

Ответы:

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';

Это все. Вы можете настроить вес поля так, чтобы он располагался так, как вы хотите. Но в конце концов это действительно просто. :)

Рафаэль Аленкар
источник
Это должен быть принятый ответ, ИМО.
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
Тогда я не понимаю, почему вы хотите использовать модуль Field Group? Просто определите набор полей и переместите туда свои поля. Например: drupal.stackexchange.com/questions/4049/…
Maciej Zgadzaj
Мы можем использовать 'mode' => 'form'или 'mode' => 'default'вместо 'mode' => 'full', или просто опустить mode. Любое view_mode_name, спасибо @Maiq Fash
graceman9
Это предоставляет способ переопределить определения полей, а не делать form_alter - не то, что запрашивает OP.
aaronbauman
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
  }
}
codeinthehole
источник
0

Сначала найдите имя машины группы полей на панели CMS, затем в форме измените

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

для примера я добавил настраиваемое поле mail в группу User form field groupполей:

$form['#group_children']['mail'] = 'group_user_form_field_group';
Юсеф
источник