如何在用户个人资料中隐藏自定义用户字段?


20

在Drupal 7中,什么是阻止任何非管理用户更改自定义用户配置文件字段的最佳方法?

用例:我创建了一个名为“客户ID”的用户字段,该字段不希望用户(我的任何实际客户)发生变化。存在该字段供我自己参考,并供其他模块中的程序使用。我不介意用户看到客户ID,但是他们应该无法对其进行编辑。

我应该覆盖用户个人资料页面的页面模板吗?如果是这样,如何更改模板以使字段为只读或不可见?

非常感谢您的帮助!

克里斯

Answers:


17

我认为Field Permissions是您所需要的。这是关于它的报价(来自模块的项目页面):

...允许站点管理员设置字段级别的权限,以在任何实体上编辑,查看和创建字段。

特点

  • 在任何实体(不仅是节点)上启用字段权限。
  • 基于角色的字段权限允许根据用户的访问权限来设计不同的查看方式。
  • 作者级权限允许根据实体所有者是谁查看和编辑字段。
  • 默认情况下,不启用每个字段的权限。而是,管理员可以为需要此功能的字段显式启用这些权限。
  • 字段权限概述

谢谢,不!我已经安装了Field Permissions模块(Alpha版本是最新的,这让我有点紧张,但是无论如何),当用户查看他的个人资料时,它确实向用户隐藏了该字段。在尝试了所有模块的设置之后,似乎没有办法使该字段可见但为只读。这不是绝对要求,但会很高兴。
ctlarsen 2011年

将字段设置为可见意味着将文本字段显示为纯文本。如果要保留文本字段并将其设置为只读,我想您必须在表单上使用hook_form_alter。
pasine

再次感谢,notme。我将采用hook_form_alter路线,并查看将我带到何处。听起来这是最好的方法。
ctlarsen 2011年

该模块Field Permissions工作正常使用Drupal 8,但你可以只隐藏的自定义字段,我认为(我需要海德也是用户名)
塞巴斯蒂安·吉凯尔

5

要从用户个人资料表单中隐藏该字段,您可以#access使用将字段的属性设置为FALSE hook_form_FORMID_alter

以下代码段field_organisation为非管理员从用户个人资料表单中隐藏了该字段:

function YOURCUSTOMMODULE_form_user_profile_form_alter(&$form, &$form_state, $form_id) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    $form['field_organisation']['#access'] = FALSE;
  }
}

另请参阅有关drupalanswers的类似问题

您还可以使用template_preprocess_user_profile隐藏用户个人资料页面(而不是表单)中的字段

以下代码段field_organisation为非管理员隐藏了用户页面中的字段:

function YOURCUSTOMMODULE_preprocess_user_profile(&$vars) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    unset($vars['user_profile']['field_organisation']);
  }
}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.