0

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

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

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

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

4

2 回答 2

2

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

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

于 2013-07-27T13:35:58.440 回答
0

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”。

于 2013-07-26T09:07:05.810 回答