在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

Answers:


11
/ **
 *实现hook_field_group_build_pre_render_alter。
 * /
函数mymodule_field_group_build_pre_render_alter(&$ element){
  如果(isset($ element ['#form_id'])){
    if($ element ['#form_id'] =='mynodetype_node_form'){
      $ element ['group_myfieldgroup'] ['#states'] = array(
        '可见'=>数组(
          ':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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.