Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 如何在Drupal中隐藏用户编辑表单上的某些字段?_Forms_Drupal_Hook_Hook Form Alter - Fatal编程技术网

Forms 如何在Drupal中隐藏用户编辑表单上的某些字段?

Forms 如何在Drupal中隐藏用户编辑表单上的某些字段?,forms,drupal,hook,hook-form-alter,Forms,Drupal,Hook,Hook Form Alter,所以我有三种类型的用户-管理员,LA管理员和用户。我正在尝试设置它,以便管理员和LA管理员不能编辑用户的用户名、密码和时区。我说的是管理员的默认用户编辑表单,表单ID是“用户配置文件表单” 我已经创建了一个自定义模块,但它似乎不起作用。知道我做错了什么吗 甚至var_转储似乎也没有输出。我已清除缓存并验证模块是否已启用 function profile_change_form_alter(&$form, $form_state, $form_id) { if ($form_id

所以我有三种类型的用户-管理员,LA管理员和用户。我正在尝试设置它,以便管理员和LA管理员不能编辑用户的用户名、密码和时区。我说的是管理员的默认用户编辑表单,表单ID是“用户配置文件表单”

我已经创建了一个自定义模块,但它似乎不起作用。知道我做错了什么吗

甚至var_转储似乎也没有输出。我已清除缓存并验证模块是否已启用

 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']);
    }
}

我假设您的模块名为PROFILE\u CHANGE,因此您以
hook\u form\u alter()
的格式使用它,在这里您用模块名
PROFILE\u CHANGE
替换了
hook

您已将3'='符号放在您为检查表单id提供条件的位置,即
用户配置文件表单
。我放了简单的等号,它是“==”&它起作用了

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\u dump()
,您应该始终在窗体alter的hook函数之后使用并检查
$form
的输出,如
dpm($form)
。这将为您提供有关表单的所有信息,无论您在页面上的哪个位置有表单

function profile_change_form_alter(&$form, $form_state, $form_id) {
  dpm($form);
}

实际上,我只需将代码中的
用户配置文件表单
更改为
用户配置文件表单
,它就可以工作了。由于某些原因,drupal需要下划线。

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

如果您想隐藏它,这样用户就看不到它,但您想让表单保留字段的上一个值,请使用如下内容:

$form['field_yourfield']['#access'] = FALSE;
如果您希望它可见但被禁用(用户无法更改其值),则:


$form\u id
是表单的id,取自其PHP函数名,而不是HTML id(不保证一致)。这就是为什么在“出于某种原因”更改表单时它包含下划线而不是连字符的原因,因为破折号和下划线不是等效的字符串。标记Drupal输出包含破折号,但在内部使用下划线。您可以通过查看源代码,查找
input[name=“Form_ID”]
并使用该精确值来查找表单ID。尝试在浏览器控制台的任何Drupal管理表单页面上运行此jQuery代码段:
jQuery('input[name=“form_id”]”)。val()
将其禁用,这很有意义!
$form['field_yourfield']['#disabled'] = TRUE;