如何隐藏Drupal中用户编辑表单上的某些字段?

时间:2013-06-12 16:52:29

标签: forms drupal hook hook-form-alter

所以我有三种类型的用户 - 管理员,LA管理员和用户。我正在尝试设置它,以便管理员和LA管理员无法编辑用户的用户名,密码和时区。我说的是管理员的默认用户编辑表单,表单ID是“user-profile-form”。

我已经创建了一个自定义模块,但这似乎不起作用。知道我可能做错了吗?

即使var_dump似乎也没有输出。我已清除缓存并验证模块已启用。

 function profile_change_form_alter(&$form, $form_state, $form_id) {
    if ($form_id === 'user-profile-form') {
       var_dump ($form);

       hide($form['account']['pass']);
       hide($form['account']['current_pass_required_values']);
       hide($form['account']['current_pass']);
    }
}

3 个答案:

答案 0 :(得分:6)

如果您使用hide(),您将删除该字段,但隐藏更多是为了“延迟”字段渲染...就像您隐藏它一样,但随后(在模板文件中)您将其打印在其他位置。 因为,如果你以后不打印它,它将不会在页面中呈现,也不会被保存,如果它是强制性的,你将得到验证错误等等。

如果要隐藏它,那么用户无法看到它,但您希望表单保留字段的先前值使用如下内容:

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

如果您希望它可见,但已禁用(用户无法更改其值),那么:

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

答案 1 :(得分:3)

我假设你的模块名称是 PROFILE_CHANGE &因此,您已使用hook_form_alter()格式使用它,您已使用模块名称hook替换profile_change

您已在 3'='符号中添加条件以检查表单ID,即user-profile-form。我放了一个简单的等号,即'=='&它正在发挥作用。

function profile_change_form_alter(&$form, $form_state, $form_id) {
    if ($form_id == 'user-profile-form') {
       hide($form['account']['pass']);
       hide($form['account']['current_pass_required_values']);
       hide($form['account']['current_pass']);
    }
}

请勿使用var_dump(),您应始终使用DEVEL&在您的钩子函数之后检查$form的{​​{1}}的输出,如表格更改。这将为您提供有关表单的所有信息,只要您在页面上有表单。

dpm($form)

答案 2 :(得分:3)

实际上我只需在代码中将user-profile-form更改为user_profile_form即可使用。出于某种原因,drupal需要下划线。