프로그래밍 방식으로 필드 그룹에 필드 추가


15

"필드 그룹"모듈을 사용하고 백엔드에 일부 그룹을 만들었습니다. 이제 프로그래밍 방식으로 그룹에 필드를 추가하고 싶습니다. 어떻게해야합니까?

Hook_form_alter를 사용하고 있는데 모든 필드에 속한 필드 그룹이 나열된 'un'속성이 있음을 알았지 만 create 및 'und'배열 및 필드 그룹 이름을 추가하면 작동하지 않습니다. .

어떻게해야합니까?


1
field_group API를 사용할 수 있습니다. Checkout hook_field_group_build_pre_render_alter () ( drupal.org/node/1017962 )
codeinthehole

답변:


20

이것은 조금 낡았지만 같은 일을하고 싶었고 웹에서 답을 찾을 수 없었습니다. 나는 그것을 혼자서 알아 내었다.

이름이 "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';

그게 다야. 원하는대로 배치되도록 필드 무게를 조정할 수 있습니다. 그러나 결국 이것은 정말 간단합니다. :)


이것이 정답입니다, IMO.
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 Group 모듈을 사용하고 싶은지 모르겠습니다. 필드 세트를 정의하고 필드를 이동하십시오. 예 : drupal.stackexchange.com/questions/4049/…
Maciej Zgadzaj

대신 또는를 사용 'mode' => 'form'하거나 생략 할 수 있습니다 . 모든 view_mode_name, 감사 @Maiq Fash'mode' => 'default''mode' => 'full'mode
graceman9

이것은 OP가 요구하는 것이 아니라 form_alter를 수행하지 않고 필드 정의를 재정의하는 방법을 제공합니다.
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
  }
}

0

먼저 CMS 패널에서 필드 그룹 컴퓨터 이름을 찾은 다음 alter do do 양식에서

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

instanst를 위해 사용자 정의 필드 메일을 User form field group필드 그룹에 추가했습니다 .

$form['#group_children']['mail'] = 'group_user_form_field_group';
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.