rae*_*aeq 5 forms hook drupal 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']);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你使用hide()你将删除该字段,但隐藏更多是为了"延迟"字段渲染...就像你隐藏它,但然后(在模板文件中)你打印它在其他地方.因为,如果你以后不打印它将不会在页面中呈现,不会被保存,如果它是强制性的,你将得到验证错误等等.
如果你想隐藏它,那么用户无法看到它,但你希望表单保持字段的先前值使用如下:
$form['field_yourfield']['#access'] = FALSE;
Run Code Online (Sandbox Code Playgroud)
如果您希望它可见,但禁用(用户无法更改它的值),那么:
$form['field_yourfield']['#disabled'] = TRUE;
Run Code Online (Sandbox Code Playgroud)
小智 3
我假设您的模块名称是PROFILE_CHANGE &,以便您以 的格式使用它hook_form_alter(),您已将其替换hook为您的模块名称profile_change。
您在给出检查表单 ID 的条件的位置放置了3 个“=”符号,即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']);
}
}
Run Code Online (Sandbox Code Playgroud)
不要使用var_dump(),您应该始终使用DEVEL并在您的钩子函数之后检查$formlike的输出以进行形式更改。dpm($form)这将为您提供有关表单的所有信息,无论您的页面上有表单。
function profile_change_form_alter(&$form, $form_state, $form_id) {
dpm($form);
}
Run Code Online (Sandbox Code Playgroud)