背景:在 Drupal 7 中,我使用 CCK(也称为 Field UI)创建了一个表单。我用了Field group模块来创建一个字段组,但我需要它是有条件的,这意味着它只会根据以前的答案显示。
先前的研究:要创建条件字段,您可以使用 hook_form_alter()编辑 #states像这样的属性:
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'person_info_node_form') {
// Display 'field_maiden_name' only if married
$form['field_maiden_name']['#states'] = array(
'visible' => array(
':input[name="field_married[und]"]' => array('value' => 'Yes'),
),
);
}
}
但是,似乎没有办法将状态 API 用于字段组。需要注意的一件事是,虽然字段存储在 $form
中,但字段组存储在 $form['#groups']
和 $form 中['#fieldgroups']
。我不知道如何区分这些,考虑到这一点,我尝试申请 #states以与上述相同的方式将属性分配给字段组。但是,它只会产生服务器错误。
问题:有没有办法使用 States API 或其他替代方法有条件地显示字段组?
最佳答案
你必须使用 hook_field_group_build_pre_render_alter()
简单地:
function your_module_field_group_build_pre_render_alter(&$element) {
$element['your_field_group']['#states'] = array(
'visible' => array(
':input[name="field_checkbox"]' => array('checked' => TRUE),
),
);
}
这非常有效。如果 A 组在另一个组中,则执行此操作
$element['groupA']['groupB']['#states'] etc....
如果不存在,您可能需要添加一个 id 属性:
$element['your_field_group']['#attributes']['id'] = 'some-id';
$element['yout_field_group']['#id'] = 'some-id';
关于php - Drupal 7 中的条件字段组/字段集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11042523/