logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动

使用 #states 在 hook_form_alter 中

22/02/2025, by 匿名 (未验证)

你好。我正在尝试解决在Drupal 7中实现字段依赖性的问题。从众多问题中,我了解到在Drupal 7中使用#states比使用条件字段更为优化。显然,这个模块的另一个难点是使用multi_step模块时的依赖性问题。

总体来说,我已经弄清楚了#states的工作原理。但我只理解了它在创建自己的表单hook_form时的用法。我的任务是重新设计一个已经存在的材料添加表单。

hook_form_ID_FORM_alter

我正在使用它。通过dsm($form)找到数组;
但我无法理解如何正确地定义依赖关系。

假设在创建的表单中,我是这样做的:

<?php $form['radio_type'] = array(
    
'#type' => 'radios',
    
'#options' => array(
      
'0'   => t('出现下拉组'),
      
'1' => t('文本字段未激活'),
      
'2'      => t('复选框消失'),
    ),
    
'#title' => t('选择操作')
  );
  
  
$form['grupa'] = array(
    
'#type' => 'fieldset',
    
'#title' => t('组'),
    
'#states' => array(
      
'visible' => array(
        
':input[name="radio_type"]' => array('value' => '0'),
      ),
    ),
  );
?>

 

在hook_form_alter函数中(目前在模板中编写)
我尝试做这样的事情:

<?phpfunction theme_form_zavedeniya_node_form_alter(&$form, &$form_state$form_id) {
   
dpm($form); 
   
$form['body']['und']['0']['value']['#states']  = array(
  
'invisible' => array(
    
':input[name="field_sity2"]' => array('value' => '56'),
  ),
);
}
?>

 

也就是说,我希望在选择field_sity2字段(链接到术语)时,选择56的值会使body字段消失。
总之,什么都不工作。我尝试了不同的方法,但似乎从来没有成功过。请给我一些建议。

P.S. 如果你能建议一些用于创建具有依赖字段的多步骤材料创建表单的工具,并且在后续编辑材料时可以通过标签而不是步骤进行编辑,那就太好了。