Drupal 7编辑用户页面覆盖

时间:2011-02-16 15:44:34

标签: drupal drupal-7 user-profile hook-form-alter

我需要覆盖特定用户角色的'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;
 }

2 个答案:

答案 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']而不是。