Скрыть группу полей CCK, используя #states в hook_form_alter ()?

9

У меня есть пользовательский модуль, и я пытаюсь скрыть группу полей CCK, используя "#states", когда определенный элемент выбран в раскрывающемся списке выбора.

Я попытался использовать состояния из 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 .

но все равно безрезультатно. Я могу скрыть все элементы формы в группе полей, используя состояния, но не саму группу полей. У кого-нибудь есть идеи?

thepearson
источник
Для будущих зрителей: @ andriy-malish 'ответ правильный.
UltraBob

Ответы:

11
/ **
 * Реализует hook_field_group_build_pre_render_alter.
 * /
function mymodule_field_group_build_pre_render_alter (& $ element) {
  if (isset ($ element ['# form_id'])) {
    if ($ element ['# form_id'] == 'mynodetype_node_form') {
      $ element ['group_myfieldgroup'] ['# states'] = array (
        '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'),
  ),
),
rocketeerbkw
источник
2
Спасибо за ваше предложение. Хотя это то же самое, что мой код только немного отличается. Я могу скрыть наборы полей, если я объявлю форму и набор полей с помощью FAPI. Моя проблема в том, что он не работает с группами полей CCK в hook_form_alter ().
thepearson