Сховати польову групу CCK, використовуючи #states в mock_form_alter ()?


9

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

Я спробував використовувати стани зсередини kuk_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
/ **
 * Реалізує гачку_field_group_build_pre_render_alter.
 * /
функція mymodule_field_group_build_pre_render_alter (& $ елемент) {
  if (isset ($ element ['# form_id'])) {
    if ($ element ['# form_id'] == 'mynodetype_node_form') {
      $ element ['group_myfieldgroup'] ['# state'] = масив (
        'видимий' => масив (
          ': input [name = "field_myfield [und]"]' => масив ('перевірено' => 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. Моя проблема полягає в тому, що вона не працює з групами полів CCK в межах_у_контакту ().
thepearson
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.