5

所以我有三种类型的用户——管理员、洛杉矶管理员和用户。我正在尝试对其进行设置,以便管理员和 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']);
    }
}
4

3 回答 3

6

如果您使用hide(),您将删除该字段,但 hide 更多的是用于“延迟”字段渲染......就像您隐藏它一样,但是(在模板文件中)您在其他地方打印它。因为,如果您稍后不打印它,它将不会在页面中呈现,不会被保存,如果它是强制性的,您将收到验证错误等等。

如果你想隐藏它,所以用户看不到它,但你希望表单保留字段的先前值,使用类似:

$form['field_yourfield']['#access'] = FALSE;

如果您希望它可见但已禁用(用户无法更改它的值),则:

$form['field_yourfield']['#disabled'] = TRUE;
于 2014-01-10T10:50:46.277 回答
3

实际上,我只需要更改代码user-profile-form即可user_profile_form使其正常工作。出于某种原因,drupal 需要下划线。

于 2013-06-12T18:16:23.063 回答
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类似的输出以进行表单更改。dpm($form)这将为您提供有关表单的所有信息,无论您的页面上哪里有表单。

function profile_change_form_alter(&$form, $form_state, $form_id) {
  dpm($form);
}
于 2013-06-12T17:28:48.263 回答