Програматично додайте поля до польової групи


15

Я використовував модуль "Field Group" і створив деякі групи в бекенді. Тепер я хочу програмно додати поле до групи. Як я можу це зробити.

Я використовую Hook_form_alter, я помітив, що кожне поле має "und'attribute, в якому перераховується група полів, до якої він належить, але якщо масив create і 'und" і додати ім'я групи полів до нього, воно не працює .

Як мені це зробити?


1
Можна використовувати API field_group. Оформити замовлення гак_field_group_build_pre_render_alter () ( drupal.org/node/1017962 )
codeinthehole

Відповіді:


20

Це трохи старе, але я хотів зробити те саме, і не зміг знайти відповідь в Інтернеті. Я в кінцевому підсумку з’ясував це сам.

Припустимо, ви створили групу полів через інтерфейс CMS з назвою "group_product_fields". Ви додали кілька полів до цієї групи.

Тепер у вас є нове поле, яке програмно включається у форму через гачку_форму_алтер. Ви хочете додати це поле до "group_product_fields". Ось приклад того, яким може бути поле:

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

Все, що вам потрібно зробити зараз, це додати це нове поле до польової групи. Для цього додайте рядок нижче до гачка_форма_алтер. Його можна розмістити де завгодно всередині нього.

$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
Я хочу змінити форму!
SA Malik

3
Тоді я не бачу, чому ви хочете використовувати модуль Field Field? Просто визначте набір полів і перемістіть свої поля туди. Наприклад: drupal.stackexchange.com/questions/4049/…
Maciej Zgadzaj

Ми можемо використовувати 'mode' => 'form'або 'mode' => 'default'замість цього 'mode' => 'full', або modeвзагалі просто опускати . Будь-яке view_mode_name, дякую @Maiq Fash
graceman9

Це дає спосіб переосмислити визначення полів, не робити form_alter - не те, що задає ОП.
aaronbauman

1

Не знаєте, як це працювало на вас. Оскільки ім'я ключа масиву повинно відповідати імені поля бази даних. А вони:

| сутність_типу | варчар (32)
| розшарування | варчар (128)

| режим | варчар (128)

Мені доводиться використовувати наступний формат, щоб він працював. дайте мені знати, чи я роблю щось тут нерозумно.

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

1

Погляньте на hoke_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';
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.