所以我有三种类型的用户 - 管理员,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']);
}
}
答案 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需要下划线。