我需要覆盖特定用户角色的'user /%user / edit'页面,例如'foo_role'。我已成功创建了新用户注册表单,该表单明确选择了用于创建新foo_role用户的字段,但由于还有其他用户字段不适用于foo_role,因此该角色的编辑页面不正确。
这是我最好的尝试,但它失败了:
function registermodule_form_user_profile_form_alter($form, &$form_state){
global $user;
if(in_array("foo_role", $user->roles)){
unset($form['field_non_foo']);
}
return $form;
}
答案 0 :(得分:4)
Alter hooks使用变量引用来修改内存中的变量内容。因此,您也不需要在alter hooks中返回一个值。
应该是这样的:
function registermodule_form_user_profile_form_alter(&$form, &$form_state){
global $user;
if(in_array("foo_role", $user->roles)){
$form['field_non_foo'] = FALSE;
}
}
答案 1 :(得分:3)
你能澄清“失败”吗?
首先,你错过了&来自$ form。一开始就改变它。
如果这不能解决问题,请尝试弄清楚您的代码实际工作量。尝试添加drupal_set_message('用户处于foo角色');在if条件内。
如果显示,则表示未设置问题。请注意,您不应该使用unset,而是将'#access'设置为FALSE。像这样:
$form['field_non_foo']['#access'] = FALSE;
您甚至可以直接保存并保存从in_array_check()返回的内容:
$form['field_non_foo']['#access'] = in_array('foo_role', $user->roles);
但是这里存在差异,那就是#access现在将被强制为TRUE或FALSE,并且不会使用它可能已有的任何值。
编辑:您确定您的字段不在字段集中吗?那么它将是$ form ['the_fieldset'] ['field_non_foo']而不是。