【问题标题】:How to hide certain fields on the User Edit form in Drupal?如何在 Drupal 中隐藏用户编辑表单上的某些字段?
【发布时间】:2013-06-12 16:52:29
【问题描述】:

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

【问题讨论】:

  • 改为禁用它们,这是有道理的!

标签: forms drupal hook hook-form-alter


【解决方案1】:

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

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

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

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

$form['field_yourfield']['#disabled'] = TRUE;

【讨论】:

    【解决方案2】:

    我假设你的模块名称是 PROFILE_CHANGE & 所以你已经以hook_form_alter() 的格式使用它,你已经用你的模块名称profile_change 替换了hook

    您已将 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);
    }
    

    【讨论】:

      【解决方案3】:

      实际上,我只需将代码中的 user-profile-form 更改为 user_profile_form 即可。出于某种原因,drupal 需要下划线。

      【讨论】:

      • $form_id 是表单的 ID,取自其 PHP 函数名称,而不是 HTML ID(不能保证一致)。这就是为什么当你改变表格时它包含下划线而不是连字符
      • “出于某种原因”是因为破折号和下划线不是等效的字符串。 Drupal 输出的标记包含破折号,但在内部它使用下划线。您可以通过查看您的来源并找到 input[name="form_id"] 并使用该确切值来找到表单 ID。尝试在任何 Drupal 管理表单页面上的浏览器控制台中运行此 jQuery sn-p:jQuery('input[name="form_id"]').val()
      猜你喜欢
      • 1970-01-01
      • 2013-09-17
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多