php - Drupal 7 中的条件字段组/字段集

标签 php drupal drupal-7

背景:在 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/

相关文章:

PHP/MySQL : Import data and store in hierarchical nested set for use with jsTree

php - 在没有收到 "Node no longer exists"警告的情况下检查属性是否存在

html - 如何使用 HTML/CSS 对齐图像下的文本?

drupal - 仅当用户填写其个人资料中的某个字段时才触发规则?

drupal-7 - 使用 Managed_file 以自定义形式上传多个文件

php - Magento - 基于用户输入的报价/订单产品项目属性

php - Codeigniter 成本函数 - 没有错误但不计算

php - Laravel Eloquent 2 个表与 1 个表相关的关系

html - 制作带有边框的特殊样式的 css 网格

drupal - 页面管理器模块无法启用分类/术语/%术语,因为其他一些模块已被覆盖