Drupal 7 - 根据内容数据隐藏内容编辑表单的某些表单字段

时间:2013-09-12 21:01:42

标签: forms drupal permissions field

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

例如:

我有一个带复选框的内容类型...一旦检查并保存表单,我不希望此复选框再次显示...因此根据数据库中的复选框值我要隐藏显示表单时表单字段。

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

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

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

我需要的是定义逻辑的地方,如“IF(VALUEOF(CHECKBOX_1)== TRUE)那么DO_NOT_SHOW(CHECKBOX_1)”

3 个答案:

答案 0 :(得分:13)

hook_form_alter就是这样做的方式,正如Mihaela所解释的那样,但你在这个函数中有什么选择?

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

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

  • 如果您希望隐藏它,但在编辑之前要保留它的价值是:

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

即。隐藏它(我看到某人建议的地方):

hide($form['field_myfield']);

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

答案 1 :(得分:3)

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;
    }
}

答案 2 :(得分:0)

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

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