【问题标题】:Drupal 7 - Hide certain form fields of a content edit form depending on the content dataDrupal 7 - 根据内容数据隐藏内容编辑表单的某些表单字段
【发布时间】:2013-09-17 10:19:09
【问题描述】:

在 Drupal 7 中,有没有办法根据特定内容更改内容类型的标准编辑表单?

例如:

我有一个带有复选框的内容类型...一旦它被选中并保存了表单,我不希望该复选框再可见...因此基于我想隐藏的数据库中的复选框值显示表单时的表单域。

我正在建立一个小型的特定项目站点,公司想要添加项目,并且他们的客户应该遵循某些步骤(上传一些内容,提供信息等),并且还应该能够检查某些要求,一旦这些被选中,它们就不应该对他们可见/不可编辑。

此外,显示的表单字段应取决于用户的角色,然后进一步受限于内容的数据库条目。

是否有一个模块可以实现这种行为? “规则”和“字段/权限”接近我需要的,但还不够。还是我只是错过了根据条件更改表单字段的可访问性的选项?

我需要在某个地方定义一个逻辑,例如“IF (VALUEOF(CHECKBOX_1) == TRUE) THEN DO_NOT_SHOW(CHECKBOX_1)”

【问题讨论】:

  • 为什么不使用 hook_form_alter?您可以在那里获取所有值并禁用/删除元素。
  • 默认情况下,Drupal 不提供开箱即用的此类功能。由于您的要求非常具体,因此 hook_form_alter 是您可以使用的唯一选项。您需要检查特定字段中的值,然后将其隐藏。或者尝试使用依赖/条件字段模块。

标签: forms drupal permissions field


【解决方案1】:

hook_form_alter 是执行此操作的方法,正如 Mihaela 所解释的,但是您在该函数中有哪些选项?

  • 如果您只想禁用字段(它将可见,但用户无法更改),您可以这样做:

    $form['field_myfield']['#disabled'] = TRUE;

  • 如果你想隐藏它,但在编辑之前保持它的价值,这样做的方法是:

    $form['field_myfield']['#access'] = FALSE;

即隐藏它(在某处我看到有人建议):

hide($form['field_myfield']);

确实隐藏了该字段,但之后,当保存表单时,该字段为空值,验证失败等,所以这不是一个好方法。仅当您想稍后在其他地方单独打印该字段时,隐藏才有意义。

【讨论】:

    【解决方案2】:
    function your_module_form_alter(&$form, &$form_state, $form_id){
    
        switch($form_id) {
        case 'nameOfTheNode_node_form':
            //your code here. check the value from from_state.
        break;
        }
    }
    

    【讨论】:

    • 为什么使用 switch 而不是 if 语句?有很多形式可以改变吗?
    • 抱歉耽搁了,但是是的,也许在同一个模块中您想更改 2 个表单。
    • 每个表单都会调用这个函数,当它要显示的时候,所以确保通过检查它的 id 来更改正确的。
    【解决方案3】:

    在这种情况下,我使用模块 条件字段 https://www.drupal.org/project/conditional_fields

    例如:如果我的 Dependees 字段有值,则 Dependent 字段可以是可见/不可见、启用/禁用、必需/可选、选中/未选中

    【讨论】:

      猜你喜欢
      • 2015-02-20
      • 2015-04-19
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多