【问题标题】:Adding custom fields to Drupal 7 user profile depending on role根据角色将自定义字段添加到 Drupal 7 用户配置文件
【发布时间】:2013-07-26 06:09:16
【问题描述】:

我在我的 Drupal 7 网站上禁用了用户注册。只有管​​理员可以创建帐户。

我想根据管理员分配给用户的角色为用户添加自定义字段。现在我想根据管理员选择的角色向注册系统添加一些字段。

例如:如果管理员创建了一个角色为 A 的用户帐户和另一个角色为 B 的帐户。 当用户登录时,应要求用户 A 输入电话号码,而应要求第二个用户输入家庭地址。

我尝试了 profile2 模块,但无法实现我想要的。

【问题讨论】:

  • 嗨,mahdi alikhasi,请尝试写出精确的问题! @TheodorosPloumis 的答案也可以解决您想要的问题。接受他的正确答案,因为这有助于有类似问题的用户更快地解决问题

标签: drupal field registration profile


【解决方案1】:

使用完全符合您要求的 User_Role_Field 模块。如果您需要每个角色访问更好的配置,请使用Field_Permissions 模块。

请注意,用户注册后,这些字段会显示在用户个人资料下,而不是注册表单中。你的问题有点混乱……

【讨论】:

  • 谢谢! Field_Permissions 做得很好
【解决方案2】:

conditional_fields 模块,听起来它可以让你大部分时间到达那里。

如果做不到这一点,我想说你最好的选择是在自定义模块中使用 hook_form_alter()。 比如:

function yourmodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_register') {
    // Define the phone field.
    $form['phone'] = array(
      '#type' => 'textfield', 
      '#title' => t('Phone'), 
      '#size' => 30,
      '#maxlength' => 30,
      'settings' => array(
        '#states' => array(
          // Hide this field when role A isn't checked.
          'invisible' => array(
            ':input[role="A"]' => array('checked' => FALSE),
          ),
        ),
      ),
    );
    // Define home address field
    // [copy the snippet above & tweak to suit...]
  }
}

这不太可能开箱即用(我手头没有 drupal 环境),但经过一些调整,它应该可以帮助您完成大部分工作。

“':input[role="A"]' => array('checked' => TRUE)” 行需要做的工作最多,即“role”需要匹配“ Roles”复选框,并且“A”在选中时需要与A的实际值相对应。

如果您的模块中没有其他 form_alter 用法,您也可以考虑将函数名称替换为“yourmodule_user_register_form_alter”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多