2

我需要覆盖特定用户角色的“用户/%用户/编辑”页面,例如“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;
 }
4

2 回答 2

4

Alter 挂钩使用变量引用来修改内存中的变量内容。因此,您也不需要在 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;
  }   
}
于 2011-03-01T16:44:18.643 回答
3

你能澄清“失败”吗?

首先,您缺少 $form 中的 &。改变它的开始。

如果这不能解决问题,请尝试弄清楚您的代码有多少实际工作。尝试添加一个 drupal_set_message('user is in foo role'); 在 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'] 。

于 2011-02-16T19:10:09.230 回答