"필드 그룹"모듈을 사용하고 백엔드에 일부 그룹을 만들었습니다. 이제 프로그래밍 방식으로 그룹에 필드를 추가하고 싶습니다. 어떻게해야합니까?
Hook_form_alter를 사용하고 있는데 모든 필드에 속한 필드 그룹이 나열된 'un'속성이 있음을 알았지 만 create 및 'und'배열 및 필드 그룹 이름을 추가하면 작동하지 않습니다. .
어떻게해야합니까?
"필드 그룹"모듈을 사용하고 백엔드에 일부 그룹을 만들었습니다. 이제 프로그래밍 방식으로 그룹에 필드를 추가하고 싶습니다. 어떻게해야합니까?
Hook_form_alter를 사용하고 있는데 모든 필드에 속한 필드 그룹이 나열된 'un'속성이 있음을 알았지 만 create 및 'und'배열 및 필드 그룹 이름을 추가하면 작동하지 않습니다. .
어떻게해야합니까?
답변:
이것은 조금 낡았지만 같은 일을하고 싶었고 웹에서 답을 찾을 수 없었습니다. 나는 그것을 혼자서 알아 내었다.
이름이 "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';
그게 다야. 원하는대로 배치되도록 필드 무게를 조정할 수 있습니다. 그러나 결국 이것은 정말 간단합니다. :)
프로그래밍 방식으로 필드를 필드 그룹에 추가 한 후 인용 :
$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);
'mode' => 'form'
하거나 생략 할 수 있습니다 . 모든 view_mode_name, 감사 @Maiq Fash'mode' => 'default'
'mode' => 'full'
mode
그것이 어떻게 작동했는지 잘 모르겠습니다. 배열 키 이름은 데이터베이스 필드 이름과 일치해야합니다. 그리고 그들은:
| entity_type | varchar (32)
| 번들 | varchar (128)| 모드 | varchar (128)
작동하려면 다음 형식을 사용해야합니다. 내가 바보 같은 일을하고 있다면 알려주세요.
$groups = field_group_read_groups(array(
'entity_type' => 'node',
'bundle' => 'bundle type',
'mode' => 'view_mode_name'));
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
}
}