hook_form_alter ()에서 #states를 사용하여 CCK 필드 그룹을 숨기시겠습니까?


9

사용자 지정 모듈이 있는데 드롭 다운 선택 목록에서 특정 항목을 선택하면 "#states"를 사용하여 CCK 필드 그룹을 숨기려고합니다.

hook_form_alter () 내에서 상태를 사용해 보았습니다.

$form['group_mygroup']['#states']['invisible'] = array(
  ':input[name="field_trigger[' . LANGUAGE_NONE. ']"]' => array( 'value' => 'hide' ),
);

이것은 아무것도하지 않는 것 같습니다.

http://proofgroup.com/blog/2008/dec/modifying_cck_fieldgroups_hook_form_alter 와 같은 다양한 사이트에 따라 모듈의 무게를 변경하는 것을 살펴 보았습니다 .

그러나 여전히 아무 소용이 없습니다. 필드 그룹 자체가 아닌 상태를 사용하여 필드 그룹 내의 모든 양식 요소를 숨길 수 있습니다. 누구든지 어떤 아이디어가 있습니까?


향후 시청자 : @ andriy-malish의 답변정답 입니다.
UltraBob

답변:


11
/ **
 hook_field_group_build_pre_render_alter를 구현합니다.
 * /
함수 mymodule_field_group_build_pre_render_alter (& $ element) {
  if (isset ($ element [ '# form_id'])) {
    if ($ element [ '# form_id'] == 'mynodetype_node_form') {
      $ element [ 'group_myfieldgroup'] [ '# states'] = 배열 ​​(
        'visible'=> 배열 (
          ': input [name = "field_myfield [und]"]'=> array ( 'checked'=> TRUE),
        )
      );
      $ element [ 'group_myfieldgroup'] [ '# id'] = 'group_myfieldgroup';
    }
  }
}

이 후크를 사용하여 필드 그룹을 숨 깁니다. 확인란 field_myfield이 선택된 경우에만 표시됩니다 .

$element이 후크에서 변수 를 탐색하기 위해 내가 사용한

die('<pre>'.print_r($element, 1).'</pre>');

대신에 dpm().

그것이 도움이되기를 바랍니다 :)


1

필드 그룹은의 루트에 정의되어 있지 않습니다 $form. 당신이 사용하지 않을 해봐야 할 것 같습니다 $form['group_mygroup']하지만 $form['#fieldgroups']['group_mygroup'].


0

예제 모듈 에서 필드 세트를 숨기는 방법을 볼 수 있습니다 . 이를 바탕으로 귀하의 코드는 다음과 같아야합니다.

$form['group_mygroup']['#states'] = array(
  'invisible' => array(
    ':input[name="field_trigger"]' => array('value' => 'hide'),
  ),
),

2
제안 해 주셔서 감사합니다. 그것은 내 코드가 약간 다르게 선언 한 것과 동일하지만. FAPI를 사용하여 양식과 필드 집합을 선언하면 필드 집합을 숨길 수 있습니다. 내 문제는 hook_form_alter () 내 CCK 필드 그룹에서 작동하지 않는다는 것입니다.
thepearson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.